我有一个 Pandas 数据框,如下所示:
import pandas as pd
df = pd.DataFrame({
'person': ['Mike', 'Mike', 'Mike', 'Bob', 'Bob', 'Bob', 'Susan', 'Cindy', 'Paul', 'Paul', 'Jon', 'Larry', 'Cindy', 'Larry', 'Larry', 'David', 'David', 'David', 'Eric', 'Cindy', 'Paul'],
'city': ['New York', 'New York', 'New York', 'New York', 'New York', 'New York', 'New York', 'London', 'London', 'London', 'London', 'Sydney', 'Sydney', 'Sydney', 'Sydney', 'Sydney', 'Sydney', 'Sydney', 'Tokyo', 'Tokyo', 'Tokyo']
})
对于每个城市,我想返回该城市内人数最多的人。如果出现平局,我想使用此人的字母顺序(最接近“A”)。
所需的数据框如下所示:
city person
New York Bob
London Paul
Sydney David
Tokyo Cindy
我相信我可以使用 groupby()
和 idxmax()
来做到这一点,但我不确定如何实现。
任何帮助将不胜感激。
谢谢!
最佳答案
尝试:
df.sort_values('person')\ #Sort to get alphabetical order
.groupby('city', sort=False)['person']\ #Groupby city sort False to keep city in order
.apply(pd.Series.mode)\ #Apply mode to get most frequent occurrence
.xs(0, level=1) #Use xs to get values for first level of city
输出:
city
New York Bob
London Paul
Tokyo Cindy
Sydney David
Name: person, dtype: object
并且,您可以添加 .reset_index()
来获取数据帧。
city person
0 New York Bob
1 London Paul
2 Tokyo Cindy
3 Sydney David
关于python - 如何使用 Pandas groupby 获取最大组数,使用字母顺序打破任何联系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77056099/