【问题标题】:using groupby attribute in pandas [closed]在熊猫中使用 groupby 属性[关闭]
【发布时间】:2017-06-06 08:35:04
【问题描述】:

我有一个包含 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 有效地完成吗?如果可以,如何实现?

【问题讨论】:

  • 您需要添加示例代码和数据。另外,为了清楚起见,只需调用您的列 A、B、C 及其值 A1、A2、...、B1、B2、...、C1、C2、...。
  • 欢迎来到 StackOverflow。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。
  • 是的,它可以在 pandas 中完成。当您说“我想找到特定组合(a_i,b_j,c_k)连续出现的次数。”时,您希望输出是表格还是什么?向我们展示示例输出。然后,写一个更好的标题,因为 “iteration over a dataframe using pandas” 什么也没告诉我们。
  • @smci 我想获取所有计数大于固定值的组合的列表。例如:组合计数 (A1,B2,C2) 5 (A2,B2,C2) 7 .... 如果固定值为 6。那么我想要计数大于 6 的组合列表。
  • @MihirShanvir - 输出列表中的顺序重要吗?

标签: python pandas numpy dataframe frequency


【解决方案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)]

【讨论】:

  • 谢谢。这正是我想要的。
  • 如何获取size值?即当我知道组合说(A1,4,7)时,我怎么能找到尺寸。
  • 使用print (s.loc[L]),如果只有一个值并且需要标量使用print (s.loc[L].values[0])
【解决方案2】:

仅使用 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)

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    相关资源
    最近更新 更多