在这样的 pandas 数据框中:
year month passengers
0 1949 January 112
1 1949 February 118
2 1949 March 132
3 1949 April 129
4 1949 May 121
5 1949 June 135
.
.
.
137 1960 June 535
138 1960 July 622
139 1960 August 606
140 1960 September 508
141 1960 October 461
142 1960 November 390
143 1960 December 432
如何对每年乘客最多的 3 个月进行分组(并进行计算)?
可以从seaborn数据集中重现相同的数据帧:
import pandas as pd
import seaborn as sns
df = sns.load_dataset('flights')
df
这是我尝试过的:
根据评论中的建议这个帖子 https://stackoverflow.com/questions/43472125/sort-pandas-dataframe-with-multiindex-according-to-column-value我发现我可以使用数据框的子集nlargest()
重新索引数据框后:
df = df.set_index(['year', 'month'])
df2 = df.groupby(level=0)['passengers'].nlargest(3)
df2
output:
year year month
1949 1949 July 148
August 148
September 136
1950 1950 July 170
August 170
但由于某种原因year index
是重复的,我仍然需要重新索引,按年份对数据帧进行分组并对结果求和。这已经开始变得混乱了,那么有没有更好的方法呢?
这是一个简单的复制粘贴的全部内容:
import pandas as pd
import seaborn as sns
df = sns.load_dataset('flights')
df = df.set_index(['year', 'month'])
df2 = df.groupby(level=0)['passengers'].nlargest(3)
这是所需输出的形状:
# Sum of top 3 months for each year (no index other than default pandas dataframe index)
year sum
0 1949 600 (the sum is made up)
1 1950 600
.
.
.
10 1960 600
感谢您的任何建议!
编辑:系统信息:
Python 3.6.0
熊猫0.19.2
Windows 7的