[英]Plot a DataFrame based on grouped by column in Python
根据下面的代码,我正在尝试为我的 DataFrame 分配一些列,这些列已按日期的月份分组并且运行良好:
all_together = (df_clean.groupby(df_clean['ContractDate'].dt.strftime('%B'))
.agg({'Amount': [np.sum, np.mean, np.min, np.max]})
.rename(columns={'sum': 'sum_amount', 'mean': 'avg_amount', 'amin': 'min_amount', 'amax': 'max_amount'}))
但是出于某种原因,当我尝试绘制结果(以任何形式作为绘图)时,它无法将我的“ContractDate”识别为列以及任何重命名的名称,例如:“sum_amount”。
您是否知道问题是什么以及作为绘制数据的规则我遗漏了什么?
我已经尝试了下面的代码进行绘图,它问我什么是“ContractDate”,什么是“sum_amount”!
all_together.groupby(df_clean['ContractDate'].dt.strftime('%B'))['sum_amount'].nunique().plot(kind='bar')
#or
all_together.plot(kind='bar',x='ContractDate',y='sum_amount')
我真的很感激你的时间
干杯,zA
当您在 DataFrame 上应用 groupby 函数时,它会将 groupby 列作为索引(在您的情况下为 ContractDate )。 因此,您需要先重置索引以使其成为一列。
df = pd.DataFrame({'month':['jan','feb','jan','feb'],'v2':[23,56,12,59]})
t = df.groupby('month').agg('sum')
输出:
v2
month
feb 115
jan 35
因此,如您所见,您将获得数月作为索引。 然后当您重置索引时:
t.reset_index()
输出:
month v2
0 feb 115
1 jan 35
接下来,当您在 groupby 中的单个列上应用多个 agg 函数时,它将创建一个多索引数据帧。 所以你需要把它作为单级索引:
t = df.groupby('month').agg({'v2': [np.sum, np.mean, np.min, np.max]}).rename(columns={'sum': 'sum_amount', 'mean': 'avg_amount', 'amin': 'min_amount', 'amax': 'max_amount'})
v2
sum_amount avg_amount min_amount max_amount
month
feb 115 57.5 56 59
jan 35 17.5 12 23
它创建了一个多索引。如果你检查 t.columns,你会得到
MultiIndex(levels=[['v2'], ['avg_amount', 'max_amount', 'min_amount', 'sum_amount']],
labels=[[0, 0, 0, 0], [3, 0, 2, 1]])
现在使用这个:
t.columns = t.columns.get_level_values(1)
t.reset_index(inplace=True)
您将获得一个干净的数据框:
month sum_amount avg_amount min_amount max_amount
0 feb 115 57.5 56 59
1 jan 35 17.5 12 23
希望这对您的绘图有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.