如何在 Pandas 数据框中按列值分组

Posted

技术标签:

【中文标题】如何在 Pandas 数据框中按列值分组【英文标题】:How to Group by column value in Pandas Data frame 【发布时间】:2019-04-15 01:11:03 【问题描述】:

我有这样的熊猫数据框。我想在单独的变量中按 App_Name 分组

App_Name    Date        Response    Gross Revenue
com.apple.tiles2    2018-10-13  3748.723574 24133394
com.orange.thescore 2018-10-13  2034.611964 8273607
com.number.studio   2018-10-13  1807.756545 33736740
com.orange.thescore 2018-10-14  4671.930435 38575556
com.number.studio   2018-10-14  3533.461547 38726087
com.banana.com      2018-10-14  2920.33747  86230313
com.apple.tiles2    2018-10-15  3986.434851 35928884
com.number.studio   2018-10-15  2044.759823 76526368
com.apple.tiles2    2018-10-16  2610.214035 30611434
com.alpha.studio    2018-10-16  1731.429858 11643154
com.banana.com      2018-10-16  1601.387403 13781285
com.alpha.studio    2018-10-17  2769.373388 13198984
com.banana.com      2018-10-17  2205.359489 21974901
com.orange.thescore 2018-10-17  1820.852862 7565015
com.alpha.studio    2018-10-18  2784.822039 24217875
com.banana.com      2018-10-18  2545.899329 28361412
com.orange.thescore 2018-10-18  2052.207745 7544861

我想按 App_Name 对数据进行分组并存储在每个 App_Name 的单独列表或数据框中,如下所示:

App_Name    Date        Response    Gross Revenue
com.alpha.studio    2018-10-16  1731.429858 11643154
com.alpha.studio    2018-10-17  2769.373388 13198984
com.alpha.studio    2018-10-18  2784.822039 24217875

App_Name    Date        Response    Gross Revenue
com.apple.tiles2    2018-10-13  3748.723574 24133394
com.apple.tiles2    2018-10-15  3986.434851 35928884
com.apple.tiles2    2018-10-16  2610.214035 30611434

App_Name    Date        Response    Gross Revenue
com.banana.com      2018-10-14  2920.33747  86230313
com.banana.com      2018-10-16  1601.387403 13781285
com.banana.com      2018-10-17  2205.359489 21974901
com.banana.com      2018-10-18  2545.899329 28361412

App_Name    Date        Response    Gross Revenue
com.number.studio   2018-10-14  3533.461547 38726087
com.number.studio   2018-10-13  1807.756545 33736740
com.number.studio   2018-10-15  2044.759823 76526368

App_Name    Date        Response    Gross Revenue
com.orange.thescore 2018-10-13  2034.611964 8273607
com.orange.thescore 2018-10-14  4671.930435 38575556
com.orange.thescore 2018-10-17  1820.852862 7565015
com.orange.thescore 2018-10-18  2052.207745 7544861

【问题讨论】:

df.groupby('App_Name')? 我想知道这个问题是如何在 3 分钟内获得 4 票的。 【参考方案1】:

groupby 对象转换为DataFrames 字典:

d = dict(tuple(df.groupby('App_Name')))

print (d['com.alpha.studio'])
            App_Name        Date     Response     Gross  Revenue
9   com.alpha.studio  2018-10-16  1731.429858  11643154      NaN
11  com.alpha.studio  2018-10-17  2769.373388  13198984      NaN
14  com.alpha.studio  2018-10-18  2784.822039  24217875      NaN

编辑:

d1 = 
for k, v in d.items():
     d1[k] = v['Gross Revenue'].rolling(2).mean()

【讨论】:

您知道为什么dict(df.groupby('App_Name') 给出TypeError: attribute of type 'str' is not callable 错误吗?这非常奇怪 @juanpa.arrivillaga - 抱歉,不知道。 @jezrael 我想计算总收入的滚动平均值,并用计算的平均值和相应的日期分别存储日期框架。可以帮忙吗 标准DataFrame的公式是什么? @hamsa - 检查已编辑的答案。是否可以按每个 DataFrame 循环,计算值并附加回来。

以上是关于如何在 Pandas 数据框中按列值分组的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中按列分组以获得总计数

如何按列值分组应该只出现在第一行

计算由另一列值分组的列值在 pandas 数据框中的共现

如何在 Hive 中按列分组使用聚合函数

如何按列值的计数进行分组并对其进行排序?

Power Query M - 使用自定义聚合(百分位)按列值分组