处理熊猫名单

时间:2019-06-28 17:19:07

标签: pandas python-2.7

我有一个数据框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无效。

1 个答案:

答案 0 :(得分:2)

  1. 将那些非列表放入列表

    \0
  2. 使用集并设置减法

    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]