假设我有以下数据框:
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']为一系列空值。这里发生了什么?
这是一种替代方法:
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)