为Pandas DataFrame中的两列应用特定功能

时间:2019-04-04 17:59:28

标签: python pandas

我有一个带有两列的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

2 个答案:

答案 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)

这是您需要的功能,您可以通过将col1col2参数传递给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]