【发布时间】:2021-01-20 15:39:14
【问题描述】:
我有一个类似的数据框
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 中应该有一种更加矢量化的方法来做到这一点:我该怎么做?
【问题讨论】:
标签: python-3.x pandas unique