【问题标题】:Getting the number of occurrences for each combination获取每个组合的出现次数
【发布时间】:2021-10-30 04:51:07
【问题描述】:

我有一个长数据框,看起来类似于以下内容:

       ID      Type   Price
0      1        A       230
1      2        B       150
2      1        B       180
3      3        A       280
4      4        A       222
5      2        B       124
6      1        A       221

我想计算每个类型组合的出现次数,具体取决于 ID,同时还获得每个组合的平均价格。

我想要以下:

       Combinaton   Counts   Mean Price
0    [2x A, 1x B]       1        210,33 
1      [2x B]           1        137
2      [1x A]           2        251

我尝试过 .value_counts()、groupby、转换列等。但似乎没有得到我想要的。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 你正试图一次做无数的事情。尝试一次做一件事。
  • 我实际上已经尝试了多种方法,但最终我无法真正得到我想要的结果。开始思考是不可能的..
  • @Numbermind 你的问题解决了吗?这里的任何答案对您有帮助吗?如果需要澄清答案,请告诉我们。如果他们中的任何一个有助于解决您的问题,请接受您认为最好的一个,并为您认为有帮助的答案投票。
  • @Numbermind 仅供参考,我们对问题和所有答案都投了反对票,因为最近有人对未显示尝试自己解决的工作或代码的问题这样做。尽管您提到您尝试了很多,但可能反对者没有看到这一点。所以,这与答案的质量无关。

标签: python pandas group-by count transform


【解决方案1】:

执行两个groupby 操作,确保Type 上的第一个聚合产生一个像元组这样的可散列对象:

df['Counts'] = np.zeros(len(df))

df = df.groupby('ID').aggregate({'Type':tuple, 'Price':'mean', 'Counts': 'count'})

print(df.groupby('Type').aggregate({'Counts':'count', 'Price': 'mean'}).reset_index())

结果:

        Type  Counts      Price
0       (A,)      2  251.000000
1  (A, B, A)      1  210.333333
2     (B, B)      1  137.000000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多