如何解决如何使用groupby获取与列最大值对应的所有行 1.使用内连接2.排序并保持第一次观察
对于给定的数据帧 df
为:
Election Yr. Party States Votes
0 2000 A a 50
1 2000 A b 30
2 2000 B a 40
3 2000 B b 50
4 2000 C a 30
5 2000 C b 40
6 2005 A a 50
7 2005 A b 30
8 2005 B a 40
9 2005 B b 50
10 2005 C a 30
11 2005 C b 40
我想获得相应年份获得最多选票的政党。我使用以下代码将“选举年”和“政党”分组,然后使用 .sum() 来获得每年每个政党的总票数。
df = df.groupby(['Election Yr.','Party']).sum()
现在如何获得每年获得最多票数的派对?我无法得到这个。
非常感谢任何支持。
解决方法
尝试结合使用 groupby
和 idxmax
:
gb = df.groupby(["Election Yr.","Party"]).sum()
gb.loc[gb.groupby("Election Yr.")["Votes"].idxmax()].reset_index()
>>> gb
Election Yr. Party Votes
0 2000 B 90
1 2005 B 90
,
1.使用内连接
您可以在做第一个 df
之前先从 groupby
开始。然后,您将获得每年的最大票数,然后将年票组合合并以获得每年得票最多的政党。
# Original data
df = pd.DataFrame({'Election Yr.':[2000,2000,2005,2005],'Party':['A','A','B','C',],'Votes':[50,30,40,50,40]})
# Get number of votes per year-party
df = df.groupby(['Election Yr.','Party'])['Votes'].sum().reset_index()
# Get max number of votes per year
max_ = df.groupby('Election Yr.')['Votes'].max().reset_index()
# Merge on key
max_ = max_.merge(df,on=['Election Yr.','Votes'])
# Results
print(max_)
> Election Yr. Votes Party
> 0 2000 90 B
> 1 2005 90 B
2.排序并保持第一次观察
或者,您可以按每年的投票数排序:
df = df.groupby(['Election Yr.','Party'])['Votes'].sum().reset_index()
df = df.sort_values(['Election Yr.','Votes'],ascending=False)
print(df.groupby('Election Yr.').first().reset_index())
print(df)
> Election Yr. Party Votes
> 0 2000 B 90
> 1 2005 B 90
,
Here you can see the total number of votes given to each Party (A,B,C) according to Election Yr.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。