在 pandas 中使用 groupby 属性

using groupby attribute in pandas

我有一个包含 3 列(A、B、C)和大量行的 DataFrame。这些列中的每一列都有不同类型的元素:分别是 A1、A2... B1、B2... 和 C1、C2...。

我想找出特定组合(比如 (A1,B2,C2))连续出现的次数。然后我想生成一个(摘要)列表,其中包含频率计数超过固定阈值的所有组合。示例:组合计数 (A1,B2,C2) 5 (A2,B2,C2) 7 .... 如果固定值为 6.

我是 pandas 和 numpy 的新手。可以使用 pandas 有效地完成此操作吗?如果可以,怎么做?

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

所有组合的计数使用groupby + size:

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

仅使用 pandas,一种方法是使用 DataFrame.groupby():

counts = dict()

for group in df.groupby(['It', 'Cc', 'Ct']):
    print(group)
    counts[group[0]] = len(group[1])

更快的方法可能是将数据框转换为列表并使用集合中的计数器:

from collections import Counter

listed_df = [tuple(line) for line in list(df.values)]
counts = Counter(listed_df)