熊猫多列相交忽略na值

时间:2018-07-18 03:00:20

标签: python pandas dataframe

我有一个包含多列的数据框,

    data={'NAME':['A','B','C'],
  'A':[[1,2,3],[np.nan],[3,4,5]],
  'B':[[2,3,4],[3,4,5],[np.nan]],
    'C':[[2,4],[3],[6,7]]  }
df=pd.DataFrame(data)
df=df[['A','B','C']]

我可以使用来交叉列

df.assign(D=df.apply(
    lambda x: list(set(x.A).intersection(set(x.B)).intersection(set(x.C))),
    axis=1))

这将创建一个D列,

 D
[2]
[]
[]

但是我想忽略具有na值的单元格并得到交点, 预期输出为

 D
[2]
[3]
[]

如何执行此操作? 感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这是一种方式

In [72]: df.apply(lambda x: list(set.intersection(*map(set,  
                                      (v for v in x if not all (np.isnan(v)))
                                  ))
                             ), axis=1)
Out[72]:
0    [2]
1    [3]
2     []
dtype: object

答案 1 :(得分:-1)

好吧,我看到第一行的交集是2,但是第二行的交集怎么只有“ 3”呢?

enter image description here