在熊猫中使用groupby属性
我有一个DataFrame,有3列(A,B,C)和大量的行。在每个列中都有不同类型的元素:A1,A2 ... B1,B2 ...和C1,C2 ...。在熊猫中使用groupby属性
我想查找特定组合(例如(A1,B2,C2))在一行中出现的次数。然后,我想要生成频率计数超过固定阈值的所有组合的(摘要)列表。例如:组合计数(A1,B2,C2)5(A2,B2,C2)7 ....如果固定值为6.
我是熊猫和numpy的新手。这可以使用熊猫高效地完成,如果是的话,怎么样?
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)]
谢谢。这正是我想要的。 –
如果我的回答很有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067)它。谢谢。 – jezrael
如何获取大小值?即当我知道组合说(A1,4,7)时我怎么能找到尺寸。 –
只使用熊猫,一个办法可能是使用数据帧.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)
您需要添加示例代码和数据。另外,为了清楚起见,只需调用列A,B,C及其值A1,A2,...,B1,B2,...,C1,C2 ...。 – smci
欢迎来到*。请花时间阅读这篇文章[如何提供一个伟大的熊猫示例](http://*.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)以及如何提供[最小,完整和可验证的示例](http://*.com/help/mcve)并相应地修改您的问题。 [如何提出一个好问题](http://*.com/help/how-to-ask)上的这些技巧也可能有用。 – jezrael
是的,它可以在熊猫中完成。当你说*“我想找到一个特定的组合(a_i,b_j,c_k)在一行中出现的次数。”*,你想要你的输出是一个表,或什么?向我们展示示例输出。然后,写一个更好的标题,因为*“使用熊猫迭代数据框”*不会告诉我们什么。 – smci