在pandas中使用groupby属性

时间:2017-06-06 08:35:05

标签: python pandas numpy dataframe frequency

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

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

我是熊猫和numpy的新手。这可以使用熊猫高效完成,如果是这样的话?

2 个答案:

答案 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

对于所有组合的计数,请使用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)]

答案 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)