我有一个这样的数据框:
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列类似。我该如何实现?
答案 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)]