在 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
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)
我有一个包含 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
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)