Groupby维护组之间的顺序?用哪种方法?
在回答问题时,按月份名称对熊猫的数据框系列进行排序?我们遇到了一些奇怪的行为groupby
。
df = pd.DataFrame([["dec", 12], ["jan", 40], ["mar", 11], ["aug", 21], ["aug", 11], ["jan", 11], ["jan", 1]], columns=["Month", "Price"])
df["Month_dig"] = pd.to_datetime(df.Month, format='%b', errors='coerce').dt.month
df.sort_values(by="Month_dig", inplace=True)
# Now df looks like
Month Price Month_dig
1 jan 40 1
5 jan 11 1
6 jan 1 1
2 mar 11 3
3 aug 21 8
4 aug 11 8
0 dec 12 12
total = (df.groupby(df['Month'])['Price'].mean())
print(total)
# output
Month
aug 16.000000
dec 12.000000
jan 17.333333
mar 11.000000
Name: Price, dtype: float64
似乎在中total
,数据按字母顺序排序。当我和OP期待时
Month
jan 17.333333
mar 11.000000
aug 16.000000
dec 12.000000
Name: Price, dtype: float64
背后的机制是groupby
什么?我知道它会保留文档中每个组 的顺序,但是组之间的顺序是否有规则
?在我看来,当数据df
以这种方式排序时,一个非常简单的组顺序将是[“ jan”,“ mar”,“ aug”,“ dec”] 。
ps从[“ aug”,“ dec”,“ jan”,“ mar”]中看来,这些组名是按字母顺序排序的。
我正在使用Python 3.6和pandas‘0.20.3’
-
pandas.DataFrame.groupby
有一个sort
默认为的参数True
。尝试total = (df.groupby(df['Month'], sort=False)['Price'].mean())