【问题标题】:Python: Create a plot that show the departments expenses over time in each department:Python:创建一个图表,显示每个部门在一段时间内的部门费用:
【发布时间】:2021-11-27 13:29:35
【问题描述】:

我是 python 新手,但在将正确信息放入图表时遇到问题。

有几个不同的部门在全年都有不同的付款发票。我希望能够将它们分组,这样我就可以在方框图中查看每个部门每个月的发票合计金额。

我目前能够获得部门在一年中每个月收到发票的频率,但我想要的是金额而不是频率

这是我目前的代码

df['Udstedelsesdato'] = pd.to_datetime(df['Udstedelsesdato'])
df = df[(df['Udstedelsesdato'].dt.year == 2019)]
df = df[df.OrganisationNiveau3 != 'Direktionen , Fælles område'] 
df = df[df.OrganisationNiveau3 != 'Kommunaldirektørens Stabe']
df = df[df.OrganisationNiveau3 != 'Kultur og Erhverv']
df = df[df.OrganisationNiveau3 != 'Økonomi']

plot_df = (
    df.groupby([pd.Grouper(key='Udstedelsesdato',freq='M'), 'OrganisationNiveau3'])
        .size()
        .reset_index(name='count')
        .pivot(index='Udstedelsesdato', columns='OrganisationNiveau3', values='count')
)
# Plot Bar
ax = plot_df.plot(kind='bar', rot=0, ylabel='Frequency', xlabel =' Months')
# Format X-axis ticks
ax.xaxis.set_major_formatter(
    ticker.FixedFormatter(plot_df.index.strftime('%d-%m'))
)
plt.rcParams.update({'font.size': 40})
plt.rcParams["figure.figsize"]=(50,50)
plt.show()]

这是它的外观: With frequency

以及我希望它的外观: With amount

这就是我的数据集的样子: Dataset

为了简单起见,我还对 20 多列中的一些列进行了排序...

Udstedelsesdato 是发票日期

Beløb 是发票金额

OrganisationNiveau3 是部门

和数据:

    date    Organisation    amount  ID
21-01-2019  a   80,00    1
24-11-2019  b   4.000,00    2
24-03-2019  c   2.250,00    3
21-01-2019  d   3.000,00    4
21-04-2019  e   298,00  5
24-12-2019  a   564,38  6
24-05-2019  b   157,50  7
24-06-2019  c   157,50  8
24-07-2019  d   48,00   9
24-08-2019  e   280,00  10
24-09-2019  a   199,00  11
28-10-2019  b   75,20   12

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    如果你想要发票的总和,那么用 sum() 代替 size:

    plot_df = (
        df.groupby([pd.Grouper(key='Udstedelsesdato',freq='M'), 'OrganisationNiveau3'])
            **.sum()**
            .reset_index(name='count')
            .pivot(index='Udstedelsesdato', columns='OrganisationNiveau3', values='sum')
    

    如果你在分组时使用 .size() ,你基本上会得到分组元素的计数。这就是为什么当你想得到总和时,你需要将元素的总和相加。

    【讨论】:

    • 我无法为此保留 .reset 和 .pivot 功能,对吧?我不会放松一些限制吗?
    • 我不必说需要多少金额吗?
    • 它不会改变任何东西。试试看吧。
    • 尝试将您的粘贴到代码中并更改我的(并且 ofc 删除了 **)但我只是收到“TypeError:reset_index() got an unexpected keyword argument 'name'”
    • 能否请您上传您的数据(带有虚拟数字)?谢谢
    猜你喜欢
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多