gpt4 book ai didi

python - 在 pandas 中绘制 groupby 操作的结果

转载 作者:太空宇宙 更新时间:2023-11-04 09:55:08 25 4
gpt4 key购买 nike

我有这个示例表:

    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 和日期分组后,我试图让我的表格最终表格如下所示。

    ID   Date      CumDays  Volume/Day
0 111 2016-01-01 20 50
1 111 2016-02-01 45 40
2 111 2016-03-01 76 35
3 111 2016-04-01 106 30
4 111 2016-05-01 137 25
5 111 2016-06-01 167 20
6 111 2016-07-01 198 20
7 111 2016-08-01 229 15
8 111 2016-09-01 258 15
9 111 2016-10-01 289 10
10 111 2016-11-01 318 5
11 111 2016-12-01 345 0
0 112 2016-01-01 31 55
1 112 2016-02-01 57 45
2 112 2016-03-01 88 40
3 112 2016-04-01 118 35
4 112 2016-05-01 149 30
5 112 2016-06-01 179 25
6 112 2016-07-01 210 25
7 112 2016-08-01 241 20
8 112 2016-09-01 271 20
9 112 2016-10-01 302 15
10 112 2016-11-01 331 10
11 112 2016-12-01 362 0

接下来,我希望能够提取每个 ID 的第一个交易量/天值、所有 CumDays 值以及每个 ID 和日期的所有交易量/天值。所以我可以使用它们进行进一步的计算和绘制体积/天与 CumDays 的关系图。以 ID:111 为例,Volume/Day 的第一个值仅为 50,而 ID:112 的第一个值仅为 55。ID:111 的所有 CumDays 值均为 20,45... ID:112,它将为 31,57...对于所有交易量/日 --- ID:111,将是 50、40...并且 ID: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

这样做,累计计算根本不生效。它返回原始天数。这不允许我进一步提取 Volume/Day 的第一个值、所有 CumDays 值和我需要的所有 Volume/Day 值。任何关于如何去做的建议或帮助将不胜感激。谢谢

最佳答案

获取一个groupby对象。

g = df.groupby('ID')

使用transform 计算列:

df['CumDays'] = g.Days.transform('cumsum')
df['First Volume/Day'] = g['Volume/Day'].transform('first')
df

ID Date Days Volume/Day CumDays First Volume/Day
0 111 2016-01-01 20 50 20 50
1 111 2016-02-01 25 40 45 50
2 111 2016-03-01 31 35 76 50
3 111 2016-04-01 30 30 106 50
4 111 2016-05-01 31 25 137 50
5 111 2016-06-01 30 20 167 50
6 111 2016-07-01 31 20 198 50
7 111 2016-08-01 31 15 229 50
8 111 2016-09-01 29 15 258 50
9 111 2016-10-01 31 10 289 50
10 111 2016-11-01 29 5 318 50
11 111 2016-12-01 27 0 345 50
0 112 2016-01-01 31 55 31 55
1 112 2016-01-02 26 45 57 55
2 112 2016-01-03 31 40 88 55
3 112 2016-01-04 30 35 118 55
4 112 2016-01-05 31 30 149 55
5 112 2016-01-06 30 25 179 55
6 112 2016-01-07 31 25 210 55
7 112 2016-01-08 31 20 241 55
8 112 2016-01-09 30 20 271 55
9 112 2016-01-10 31 15 302 55
10 112 2016-01-11 29 10 331 55
11 112 2016-01-12 31 0 362 55

如果您想要分组绘图,您可以在按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

关于python - 在 pandas 中绘制 groupby 操作的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46230399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com