python - 如何在熊猫数据框中通过两列从组中获取最大值并在第三列中求和?
问题描述
所以我在一个看起来像这样的熊猫数据框上使用了 group by
df.groupby(['year','month'])['AMT'].agg('sum')
我得到这样的东西
year month
2003 1 114.00
2 9195.00
3 300.00
5 200.00
6 450.00
7 68.00
8 750.00
9 3521.00
10 250.00
11 799.00
12 1000.00
2004 1 8551.00
2 9998.00
3 17334.00
4 2525.00
5 16014.00
6 9132.00
7 10623.00
8 7538.00
9 3650.00
10 7733.00
11 10128.00
12 4741.00
2005 1 6965.00
2 3208.00
3 8630.00
4 7776.00
5 11950.00
6 11717.00
7 1510.00
...
2015 7 1431441.00
8 966974.00
9 1121650.00
10 1200104.00
11 1312191.90
12 482535.00
2016 1 1337343.00
2 1465068.00
3 1170113.00
4 1121691.00
5 1302936.00
6 1518047.00
7 1251844.00
8 825215.00
9 1491626.00
10 1243877.00
11 1632252.00
12 750995.50
2017 1 905974.00
2 1330182.00
3 1382628.52
4 1146789.00
5 1201425.00
6 1278701.00
7 1172596.00
8 1517116.50
9 1108609.00
10 1360841.00
11 1340386.00
12 860686.00
我想要的是从第三个求和列中选择最大值,以便最终数据框只有每年的最大值,例如:
year month
2003 2 9195.00
2004 3 17334.00
2005 5 11950.00
... 等等
我必须通过聚合向我的组添加什么才能做到这一点?
解决方案
我认为需要DataFrameGroupBy.idxmax
:
s = df.groupby(['year','month'])['AMT'].sum()
out = s.loc[s.groupby(level=0).idxmax()]
#working in newer pandas versions
#out = df.loc[df.groupby('Year').idxmax()]
print (out)
Year month
2003 2 9195.0
2004 3 17334.0
2005 5 11950.0
Name: AMT, dtype: float64
如果可能,每年有多个最大值:
out = s[s == s.groupby(level=0).transform('max')]
print (out)
Year month
2003 2 9195.0
2004 3 17334.0
2005 5 11950.0
Name: AMT, dtype: float64
推荐阅读
- c++ - 当显式转换顺利时,从 uint8_t 到 int 的隐式转换出错了
- rest - 我们可以通过 WEB/REST API 访问 Apple Watch 跟踪数据吗?
- javascript - 如何比较ajax请求的html?
- javascript - telling if element is scrolled on top of it
- c - Detect ideal socket connection
- python - Linear regression with constrained intercept
- node.js - Error when trying to install nodemon on MacOS
- docker - Aerospike Hearbeat calls stuck in TIME_WAIT
- css - 谷歌按钮不呈现 - react.js
- javascript - NODE.JS“请求”不在数组中添加响应