python - 使用 Pandas 在 Python 中对数据框的行子集进行分组

标签 python python-3.x pandas pandas-groupby

我从包含 30 万行的数据集中获得以下数据框:

    CustomerID  Revenue
0   17850.0     15.30
1   17850.0     11.10
2   13047.0     17.85
3   13047.0     17.85
4   17850.0     20.34
5   13047.0     12.60
6   13047.0     12.60
7   13047.0     31.80
8   17850.0     20.34
9   17850.0     15.30
10  13047.0     9.90
11  13047.0     30.00
12  13047.0     31.80
13  12583.0     40.80
14  12583.0     39.60
15  13047.0     14.85
16  13047.0     14.85
17  12583.0     15.60
18  12583.0     45.00
19  12583.0     70.80

CustomerID 值成批重复。例如,前两行中包含的 CustomerID 值 17850 稍后可能会在数据集中的某个时间点再次出现。 我正在尝试按相同的客户 ID 对行的子集进行分组,并汇总该行的收入。我想做的数据框转换应该是这样的:

   CustomerID   TotalRevenue
0   17850.0      26.40
1   13047.0      35.70
2   17850.0      20.34
3   13047.0      57.0
4   17850.0      35.64
5   13047.0      71.7
6   12583.0      80.4
7   13047.0      29.7
8   12583.0     131.4

问题是,如果我使用 groupby 方法,它会将具有相同 CustomerID 值的所有行分组。因此,通过这种方式,它将整个数据框中的所有 17850 个 CustomerID 值组合在一起,而不仅仅是前 2 行的一堆,然后是其他 CustomerID 值的后续串。

非常感谢您提供有关如何使用 Pandas 执行此操作的帮助。谢谢

最佳答案

df.groupby(['CustomerID',df.CustomerID.diff().ne(0).cumsum()],sort=False)['Revenue'].sum().rename_axis(['CustomerID','GID']).reset_index().drop('GID',axis=1)

输出:

   CustomerID  Revenue
0     17850.0    26.40
1     13047.0    35.70
2     17850.0    20.34
3     13047.0    57.00
4     17850.0    35.64
5     13047.0    71.70
6     12583.0    80.40
7     13047.0    29.70
8     12583.0   131.40

关于python - 使用 Pandas 在 Python 中对数据框的行子集进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45285371/

相关文章:

pandas - 如何清晰地绘制 statsmodels 线性回归 (OLS)

python - 计算pandas DataFrame中每组的t检验统计量

python - 在 Windows 上设置 Python 以不在 cmd 中键入 "python"

python - 内部 Keras 模型中的多个嵌入层问题

python - 如何创建具有多种原因的 python 异常?

python - Mongoengine:查询 MapField

python - 如何只引用MultiIndex的某些部分?

python - OSX 通过 brew 为 python3 安装 numpy

python - 如何使用 Pandas 将字符串与数据框中的字符串进行比较?

python - (1e18+1)(1e18)/(1e18) 的除法在 Python 3.6 中给出 (1e18)