拼接Pandas DataFrame后按多列排序未生效问题咨询
Pandas排序未生效?踩中默认参数的坑啦!
嘿,我太懂你遇到的这个问题了!我之前刚用Pandas的时候也踩过这个一模一样的坑😅
先给你拆解问题根源:你拼接DataFrame的操作AB = pd.concat([A,B],ignore_index=True)完全没问题,这一步确实把A和B合并成了一个新的DataFrame。但问题出在排序的那一行——Pandas的sort_values()方法默认不会修改原DataFrame,而是返回一个排序后的新对象(默认参数inplace=False)。
如果你只是单独运行AB.sort_values(['geohash','timestamp']),却没有把这个返回的结果重新赋值给AB,那原来的AB还是保持拼接后的原始顺序,根本没被改动!你看到的“实际结果”其实就是拼接后未排序的原始数据。
那怎么解决呢?给你两种常用的正确操作方式:
方法一:重新赋值覆盖原变量
把排序后的结果重新赋值给AB,这样AB就会变成排序后的版本:
AB = pd.concat([A,B],ignore_index=True) AB = AB.sort_values(['geohash','timestamp'])
方法二:用inplace=True直接修改原对象
如果你不想重新赋值,可以在调用sort_values()时加上inplace=True参数,这样就会直接在原AB上完成排序操作:
AB = pd.concat([A,B],ignore_index=True) AB.sort_values(['geohash','timestamp'], inplace=True)
按照上面任意一种方式操作后,你再查看AB,就能得到你预期的排序结果了:
geohash timestamp
0 a2a 15
1 a2b 15
2 b3a 14
3 b3b 14
内容的提问来源于stack exchange,提问作者Karl Birkkar
相关产品推荐
相关产品推荐

