从熊猫数据框中基于另一列的列的每个列表中删除元素

时间:2020-01-28 18:38:40

标签: python pandas dataframe

我想基于A列从B列中删除列表中的值,想知道如何。

给出:

df = pd.DataFrame({
    'A': ['a1', 'a2', 'a3', 'a4'],
    'B': [['a1', 'a2'], ['a1', 'a2', 'a3'], ['a1', 'a3'], []]
})

我想要:

result = pd.DataFrame({
    'A': ['a1', 'a2', 'a3', 'a4'],
    'B': [['a1', 'a2'], ['a1', 'a2', 'a3'], ['a1', 'a3'], []],
    'Output': [['a2'], ['a1', 'a3'], ['a1'], []]
})

2 个答案:

答案 0 :(得分:5)

一种实现方法是通过DataFrame.apply将过滤功能应用于每一行:

df['Output'] = df.apply(lambda x: [i for i in x.B if i != x.A], axis=1)

答案 1 :(得分:1)

使用iterrows()的另一种解决方案:

for i,value in df.iterrows():
    try:
        value['B'].remove(value['A'])
    except ValueError:
        pass
print(df)

输出:

    A         B
0  a1      [a2]
1  a2  [a1, a3]
2  a3      [a1]
3  a4        []