我有一个具有以下内容的Series对象:
date price dec 12 may 15 apr 13 ..
问题陈述: 我想按月显示它,并计算每个月的平均价格,然后按月以排序的方式显示它。
所需输出:
month mean_price Jan XXX Feb XXX Mar XXX
我想到了制作列表并将其传递给sort函数的方法:
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
但是 sort_values 不支持序列化。
我有一个大问题是,即使
df = df.sort_values(by='date',ascending=True,inplace=True)最初可以工作,df但是在我做完之后groupby,它并不能保持排序后的顺序df。
df = df.sort_values(by='date',ascending=True,inplace=True)
df
groupby
总而言之,我需要从初始数据帧起这两列。对datetime列进行排序,并使用月份(dt.strftime(’%B’))通过分组进行排序。现在,我必须按月份名称对其进行排序。
我的代码:
df # has 5 columns though I need the column 'date' and 'price' df.sort_values(by='date',inplace=True) #at this part it is sorted according to date, great total=(df.groupby(df['date'].dt.strftime('%B'))['price'].mean()) # Though now it is not as it was but instead the months appear alphabetically
感谢@Brad Solomon提供了一种更快的大写字符串方式!
注意1 @Brad Solomon的答案使用pd.categorical应该比我的答案节省更多资源。他展示了如何为您的分类数据分配顺序。你不应该错过它:P
pd.categorical
或者,您可以使用。
df = pd.DataFrame([["dec", 12], ["jan", 40], ["mar", 11], ["aug", 21], ["aug", 11], ["jan", 11], ["jan", 1]], columns=["Month", "Price"]) # Preprocessing: capitalize `jan`, `dec` to `Jan` and `Dec` df["Month"] = df["Month"].str.capitalize() # Now the dataset should look like # Month Price # ----------- # Dec XX # Jan XX # Apr XX # make it a datetime so that we can sort it: # use %b because the data use the abbriviation of month df["Month"] = pd.to_datetime(df.Month, format='%b', errors='coerce').dt.month df = df.sort_values(by="Month") total = (df.groupby(df['Month"])['Price'].mean()) # total Month 1 17.333333 3 11.000000 8 16.000000 12 12.000000
注意2 groupby默认情况下会为您排序组密钥。请注意,在和中使用相同的键进行排序和分组df = df.sort_values(by=SAME_KEY),total = (df.groupby(df[SAME_KEY])['Price'].mean()).否则,可能会发生意外行为。 注意3 一种更有效的计算方法是先计算均值,然后按月进行排序。这样,您只需要排序12个项目,而不是整个项目df。如果不需要df分类,它将减少计算成本。
df = df.sort_values(by=SAME_KEY)
total = (df.groupby(df[SAME_KEY])['Price'].mean()).
注释4 对于已经拥有 month as index的人,想知道如何使其分类,请看一下熊猫。CategoricalIndex@jezrael有一个有效的示例,可按月索引对按熊猫系列排列的分类索引进行排序
month
CategoricalIndex