我有一个数据框df:
mAID MAID mPIDs MPIDs
0 A D [X, Y, Z] [X, W, L]
1 B E [X, Y, Z] [Y, Z, W]
2 A E [X, Y, Z] [Y, Z, W]
3 A F [X, Y, Z] NaN
我想生成一个新列,其中包含mPID中的mPID,但没有MPID。即
mAID MAID mPIDs MPIDs resultPIDs
0 A D [X, Y, Z] [X, W, L] [Y,Z]
1 B E [X, Y, Z] [Y, Z, W] [X]
2 A E [X, Y, Z] [Y, Z, W] [X]
3 A F [X, Y, Z] NaN [X, Y, Z]
我也可以将NaN
替换为[]
。我就是不知道.fillna
无效。
答案 0 :(得分:2)
将那些非列表放入列表
\0
使用集并设置减法
df.MPIDs = df.MPIDs.map(lambda x: x if isinstance(x, list) else [])
备用
df.assign(resultPIDS=df.mPIDs.map(set).sub(df.MPIDs.map(set)).map(list))
mAID MAID mPIDs MPIDs resultPIDS
0 A D [X, Y, Z] [X, W, L] [Y, Z]
1 B E [X, Y, Z] [Y, Z, W] [X]
2 A E [X, Y, Z] [Y, Z, W] [X]
3 A F [X, Y, Z] [] [X, Y, Z]