根据列中的值从熊猫数据框中的列表中删除元素

ben*_*890 8 python pandas

假设我有以下数据框:

a = [[1,2,3,4,5,6],[23,23,212,223,1,12]]
b = [1,1]


df = pd.DataFrame(zip(a,b), columns = ['a', 'b'])
Run Code Online (Sandbox Code Playgroud)

我的目标是删除系列B中列表A中的元素。我这样做的尝试如下:

df['a'] = [i.remove(j) for i,j in zip(df.a, df.b)]
Run Code Online (Sandbox Code Playgroud)

逻辑似乎对我来说听起来不错,但是我最终得到df ['a']为一系列空值。这里发生了什么?

ACh*_*ion 6

这是一种替代方法:

In []:
df2 = df.explode('a')
df['a'] = df2.a[df2.a != df2.b].groupby(level=0).apply(list)
df

Out[]:
                        a  b
0         [2, 3, 4, 5, 6]  1
1  [23, 23, 212, 223, 12]  1
Run Code Online (Sandbox Code Playgroud)


小智 5

list.remove(x) 就地删除值并返回 None。这就是为什么上面的代码对你来说失败了。您还可以执行类似以下操作。

a = [[1,2,3,4,5,6],[23,23,212,223,1,12]]
b = [1,1]
df = pd.DataFrame(zip(a,b), columns = ['a', 'b'])
for i, j in zip(df.a, df.b):
    i.remove(j)

print df

                        a  b
0         [2, 3, 4, 5, 6]  1
1  [23, 23, 212, 223, 12]  1
Run Code Online (Sandbox Code Playgroud)