Groupby保持群组之间的顺序?用哪种方法?

Tai*_*Tai 3 python python-3.x pandas

在回答问题时按月份名称排序系列?我们遇到了一些奇怪的行为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
Run Code Online (Sandbox Code Playgroud)

似乎在total,数据按字母顺序排序.虽然我和OP都在期待

Month
jan    17.333333
mar    11.000000
aug    16.000000
dec    12.000000
Name: Price, dtype: float64
Run Code Online (Sandbox Code Playgroud)

背后的机制是groupby什么?我知道它从文档中保留了每个组中的顺序,但组中的顺序是否存在规则?在我看来,一个非常简单的组顺序将是["jan","mar","aug","dec"],因为数据df以这种方式排序.

ps从["aug","dec","jan","mar"]开始,似乎这些组名按字母顺序排序.
我正在使用Python 3.6和pandas'0.20.3'

Pat*_*ugh 5

pandas.DataFrame.groupby有一个sort默认的参数True.尝试

total = (df.groupby(df['Month'], sort=False)['Price'].mean())
Run Code Online (Sandbox Code Playgroud)

  • omg,我认为默认是'False`.谢谢! (3认同)