Pandas:排序为False时数据帧分组的最终顺序



根据上的Pandas文档https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html

排序:bool,默认True

对组密钥进行排序。关闭此选项可获得更好的性能。请注意,这不会影响每组中观察结果的顺序。Groupby保留每组中的行顺序。

这并没有真正描述当sort=False时,组的顺序是否是随机的,或者在groupby之前保留原始顺序。对火星的行为有什么见解吗?

以下是它的含义示例:

数据:

import pandas as pd
df = pd.DataFrame(data={"cost": [30, 29, 40, 45, 240, 200, 220, 180, 150, 130],
"date": [ "2017-11-01", "2016-12-01", "2016-11-01",
"2017-12-01", "2018-11-30", "2018-12-01",
"2019-11-30", "2019-12-30", "2020-11-30",
"2020-12-30"]})
df["date"] = pd.to_datetime(df["date"])
df.set_index("date", inplace=True)
print(df)
#            cost
#date            
#2017-11-01    30
#2016-12-01    29
#2016-11-01    40
#2017-12-01    45
#2018-11-30   240
#2018-12-01   200
#2019-11-30   220
#2019-12-30   180
#2020-11-30   150
#2020-12-30   130

请注意,第一个日期是2017年。

sort=False2017仍然是第一排:

df.groupby([lambda x: x.year], sort=False).count()
#Out: 
#      cost
#date      
#2017     2
#2016     2
#2018     2
#2019     2
#2020     2

由于默认为sort=True,2017不再是第一个,因为日期已排序:

df.groupby([lambda x: x.year]).count()
#Out: 
#      cost
#date      
#2016     2
#2017     2
#2018     2
#2019     2
#2020     2

在不进行排序(sort=False(的情况下,组按行中首次出现的顺序排列。通过排序(sort=True或未给出(,组将按照Python排序进行排序,即按数字、字母顺序等。

最新更新