【问题标题】:Pandas multiple column intersection ignoring na valuesPandas 多列交叉点忽略 na 值
【发布时间】:2018-07-18 12:51:17
【问题描述】:

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

    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]
[]

如何做到这一点? 感谢您的帮助。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • ` 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']]
      猜你喜欢
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2022-01-08
      • 1970-01-01
      • 2017-10-25
      相关资源
      最近更新 更多