在大Pandas中绘制groupby操作的结果

2024-04-25 00:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个样品表:

    ID   Date      Days Volume/Day
0   111 2016-01-01  20  50
1   111 2016-02-01  25  40
2   111 2016-03-01  31  35
3   111 2016-04-01  30  30
4   111 2016-05-01  31  25
5   111 2016-06-01  30  20
6   111 2016-07-01  31  20
7   111 2016-08-01  31  15
8   111 2016-09-01  29  15
9   111 2016-10-01  31  10
10  111 2016-11-01  29  5
11  111 2016-12-01  27  0
0   112 2016-01-01  31  55
1   112 2016-02-01  26  45
2   112 2016-03-01  31  40
3   112 2016-04-01  30  35
4   112 2016-04-01  31  30
5   112 2016-05-01  30  25
6   112 2016-06-01  31  25
7   112 2016-07-01  31  20
8   112 2016-08-01  30  20
9   112 2016-09-01  31  15
10  112 2016-11-01  29  10
11  112 2016-12-01  31  0

在按ID和Date分组之后,我试图使我的表final表如下所示。在

^{pr2}$

接下来,我希望能够提取每个ID的第一个Volume/Day值、所有CumDays值以及每个ID和Date的Volume/Day值。所以我可以用它们来进一步计算和绘制体积/天与立方日的关系。例如,ID:111,Volume/Day的第一个值将只有50,ID:112将只有55。ID:111的所有CumDays值将为20,45。。。身份证号码:112,号码是31,57……所有号码/天——身份证号码111,号码是50,40。。。身份证号码:112等于55,45。。。在

我的解决方案:

def get_time_rate(grp_df):
    t = grp_df['Days'].cumsum()
    r = grp_df['Volume/Day']
    return t,r

vals = df.groupby(['ID','Date']).apply(get_time_rate)
vals

这样做,累积计算根本不起作用。它返回原始的Days值。这不允许我进一步提取Volume/Day的第一个值、所有CumDays值和我需要的所有Volume/Day值。如有任何建议或帮助,我们将不胜感激。谢谢


Tags: iddfgetdateratetime样品days
1条回答
网友
1楼 · 发布于 2024-04-25 00:31:02

获取一个groupby对象。在

g = df.groupby('ID')

使用transform计算列:

^{pr2}$

如果要分组绘图,可以在按ID分组后迭代每个组。要绘制,首先设置索引并调用plot。在

fig, ax = plt.subplots(figsize=(8,6))
for i, g in df2.groupby('ID'):
    g.plot(x='CumDays', y='Volume/Day', ax=ax, label=str(i))

plt.show()

enter image description here

相关问题 更多 >