gpt4 book ai didi

python-3.x - 具有缺失值的 Pandas 中跨列的唯一值

转载 作者:行者123 更新时间:2023-12-03 23:33:32 27 4
gpt4 key购买 nike

我有一个类似的数据框

import pandas as pd
import numpy as np

df = pd.DataFrame({"Col1": ['A', np.nan, 'B', 'B', 'C'],
"Col2": ['A', 'B', 'B', 'A', 'C'],
"Col3": ['A', 'B', 'C', 'A', 'C']})

我想为每一行获取跨列的唯一组合,并使用这些值创建一个新列,不包括缺失值。

我现在要做的代码是

def handle_missing(s):

return np.unique(s[s.notnull()])

def unique_across_rows(data):


unique_vals = data.apply(handle_missing, axis = 1)

# numpy unique sorts the values automatically
merged_vals = unique_vals.apply(lambda x: x[0] if len(x) == 1 else '_'.join(x))

return merged_vals

df['Combos'] = unique_across_rows(df)

这将返回预期的输出:

       Col1    Col2  Col3   Combos
0 A A A A
1 NaN B B B
2 B B C B_C
3 B A A A_B
4 C C C C

在我看来,Pandas 中应该存在一种更加矢量化的方法来做到这一点:我该怎么做?

最佳答案

您可以尝试一个简单的列表推导式,这对于较大的数据帧可能更有效:

df['combos'] = ['_'.join(sorted(k for k in set(v) if pd.notnull(k))) for v in df.values]

或者您可以将上述列表推导式包装在一个更易读的函数中:

def combos():
for v in df.values:
unique = set(filter(pd.notnull, v))
yield '_'.join(sorted(unique))

df['combos'] = list(combos())

  Col1 Col2 Col3 combos
0 A A A A
1 NaN B B B
2 B B C B_C
3 B A A A_B
4 C C C C

关于python-3.x - 具有缺失值的 Pandas 中跨列的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65812732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com