Dataframe GroupBy的顺序错误

最近在实际项目使用Dataframe的时候遇到一个坑。
那就是假如我先对Dataframe进行GroupBy 分组,然后再对各组进行遍历。
它的顺序是并不是我们之前的排序顺序。具体如下:

import pandas as pd

test_df = pd.DataFrame([[1,88,888],[1,99,999],[3,33,333],[3,44,444],[3,55,555],[6,66,666]],columns=['id','c1','c2'])
test_df = test_df.sort_values(by=['c2'])
test_df.head(6)

当我们执行这点代码的时候,我们会得到一个这样的Dataframe。之所以没有按照id排序是因为我们最Dataframe做了排序要求,以c2为没仪表

indexidc1c2
2333333
3344444
4355555
5666666
0188888
1199999

紧接着当我们再执行:

test_group = test_df.groupby(['id'])
for i,test in test_group:
    print(test)

这时候我们就会得到一个这样的结果

indexidc1c2
0188888
1199999
indexidc1c2
2333333
3344444
4355555
indexidc1c2
5666666

这里不难发现,groupby之后的顺序,其实并不是我们想要的排序顺序。
那是因为我们又以id作为分组,所以排序方式变成了id为主。
要解决这个问题,我查了一下官方文档。在官方文档的groupby里面有这么一个参数是可以传的。
在这里插入图片描述
大致意思就是这个参数可以调整groupby方法是否按照group key进行排序。然后它的默认是True。所以才会导致groupby之后和我们sort的顺序有偏差。所以假如要保持原来顺序,我们应该:

test_group = test_df.groupby(['id'],sort=False)
for i,test in test_group:
    print(test)
indexidc1c2
2333333
3344444
4355555
indexidc1c2
5666666
indexidc1c2
0188888
1199999

最后就可以得到应有的排序了。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值