我有一个包含3列(A,B,C)和大量行的DataFrame。这些列中的每一列都有不同类型的元素:A1,A2 ...... B1,B2 ......和C1,C2 ......。
我想找到特定组合(例如(A1,B2,C2))连续出现的次数。然后我想生成频率计数超过固定阈值的所有组合的(摘要)列表。示例:组合计数(A1,B2,C2)5(A2,B2,C2)7 ....如果固定值为6。
我是熊猫和numpy的新手。这可以使用熊猫高效完成,如果是这样的话?
答案 0 :(得分:1)
df = pd.DataFrame({'A':['A1','A1','A2','A3'],
'B':[4,4,6,4],
'C':[7,7,9,7]})
print (df)
A B C
0 4 7 C1
1 4 7 C1
2 6 9 C2
3 4 7 C3
s = df.groupby(["A", "B","C"]).size()
print (s)
A B C
A1 4 7 2
A2 6 9 1
A3 4 7 1
dtype: int64
对于按值过滤的列表,添加boolean indexing
:
L = s.index[s > 1].tolist()
print (L)
[('A1', 4, 7)]
答案 1 :(得分:0)
仅使用pandas,一种方法是使用DataFrame.groupby():
counts = dict()
for group in df.groupby(['It', 'Cc', 'Ct']):
print(group)
counts[group[0]] = len(group[1])
更快捷的方法可能是将数据框转换为列表并使用集合中的Counter:
from collections import Counter
listed_df = [tuple(line) for line in list(df.values)]
counts = Counter(listed_df)