我有一个带有两列的Pandas DataFrame,每一行都包含一个元素列表。我正在尝试使用pandas.apply
方法为每一行查找两列之间的集合差异。
例如我的df
A B
0 ['a','b','c'] ['a']
1 ['e', 'f', 'g'] ['f', 'g']
所以它应该像这样:
df.apply(set_diff_func, axis=1)
我要实现的目标:
0 ['b','c']
1 ['e']
我可以使用iterrows
来实现,但是我曾经读过,最好使用apply
。
答案 0 :(得分:3)
怎么样
df.apply(lambda row: list(set(row['A']) - set(row['B'])), axis = 1)
或
(df['A'].apply(set) - df['B'].apply(set)).apply(list)
答案 1 :(得分:1)
这是您需要的功能,您可以通过将col1
和col2
参数传递给args
中的apply
选项来更改列的名称:< / p>
def set_diff_func(row, col1, col2):
return list(set(row[col1]).difference(set(row[col2])))
这应该返回所需的结果:
>>> dataset = pd.DataFrame(
[{'A':['a','b','c'], 'B':['a']},
{'A':['e', 'f', 'g'] , 'B':['f', 'g']}])
>>> dataset.apply(set_diff_func, axis=1, args=['A','B'])
0 [c, b]
1 [e]