检查值是否同时存在于数据框的任何2列中?

时间:2018-11-07 06:14:44

标签: python pandas dataframe

我有一个这样的数据框:

col_A  col_B  col_C
 A      B      NaN
 NaN    NaN    C
 NaN    B      C
 A      NaN    C
 A      NaN    C

我想获取元组,该元组显示任意2列中存在多少次值。例如:A和B都一起存在于数据帧的第一行中,但在其他任何地方都不存在。因此,我应该得到一个这样的元组:

('A','B',1).

类似地,A和C在2行中同时存在。因此输出应为:

('A','C',2)

,并且对于任何2列类似。我该如何实现?

1 个答案:

答案 0 :(得分:1)

使用嵌套列表推导和Counter删除缺失值:

from collections import Counter

c = Counter([tuple([y for y in x if pd.notnull(y)]) for x in df.values.tolist()])
print (c)
Counter({('A', 'C'): 2, ('A', 'B'): 1, ('C',): 1, ('B', 'C'): 1})

或者使用stack删除缺失值,通过GroupBy.apply创建元组并添加value_counts

c = df.stack().groupby(level=0).apply(tuple).value_counts()
print (c)
(A, C)    2
(A, B)    1
(C,)      1
(B, C)    1
dtype: int64

最后为键添加值:

out = [i + (j,) for i, j in c.items()]
print (out)
[('A', 'B', 1), ('C', 1), ('B', 'C', 1), ('A', 'C', 2)]