pandas在使用goupby().max()出现问题

pandas groupby().max() 方法使用不明

dataframe数据有三列,o_town,d_town,cu_pop,目的是找到每一个o_town对应cu_pop最大的d_town,并计算这些对应cu_pop最大的d_town的个数

数据如图:

img

有两种方法,方法一,利用 .max()聚合

img

得到结果:

img

方法二:循环计数各个o_town对应cu_pop最大的d_town:

img

得到结果:

img

两次结果不一致,不知道哪里出现了问题,希望得到指教!!

max默认会将所有非group的列作为比较对象,你需要比较的只是cu_pop列d_town不能参与

import pandas

df = pandas.read_excel('test.xlsx')
print(df.groupby('o_town').max(numeric_only=True))
print(df.groupby('o_town').apply(lambda t: t[t.cu_pop == t.cu_pop.max()]))

img

你的第一种方法,我把数据缩小成几条后,看到问题了吗。
这个聚合后直接max出来的数据都是有问题的

img




问题就在于:
你聚合后直接max,pandas会把没有聚合的列,每一列都单独取最大值
也就是说你直接max后,cu_pop那一列去的是最大值没错,但是d_town那一列程序也会取最大值。那么d_town就不是cu_pop取最大值对应的那一行的数据了


我下面放的这个图你看一下就理解了

img

提供参考实例[DataFrame 行列数据筛选实例】,期望对你有所帮助:https://blog.csdn.net/weixin_39631632/article/details/110338730

参考链接

希望有用
https://blog.csdn.net/weixin_39631632/article/details/110338730