在回答问题时,按月份名称对熊猫的数据框系列进行排序?我们遇到了一些奇怪的行为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期待时
total
Month jan 17.333333 mar 11.000000 aug 16.000000 dec 12.000000 Name: Price, dtype: float64
背后的机制是groupby什么?我知道它会保留文档中每个组 的顺序,但是组之间的顺序是否有规则 ?在我看来,当数据df以这种方式排序时,一个非常简单的组顺序将是[“ jan”,“ mar”,“ aug”,“ dec”] 。
df
ps从[“ aug”,“ dec”,“ jan”,“ mar”]中看来,这些组名是按字母顺序排序的。 我正在使用Python 3.6和pandas‘0.20.3’
pandas.DataFrame.groupby有一个sort默认为的参数True。尝试
pandas.DataFrame.groupby
sort
True
total = (df.groupby(df['Month'], sort=False)['Price'].mean())