繁体   English   中英

根据 Python 中的列分组绘制 DataFrame

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM