一个GROUPBY操作我有这样的示例表的结果:情节大熊猫
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和日期的所有容积/日的值的第一个值。因此,我可以将它们用于进一步计算并绘制Volume/Day vs 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
这样做,累计计算根本不起作用。它返回原始的Days值。这不允许我进一步提取Volume/Day的第一个值,所有CumDays值和我需要的所有Volume/Day值。任何意见或帮助如何去解决它将不胜感激。谢谢
你为什么要张贴HTML吗?这是你如何接收你的数据? – piRSquared
@piRSquared,no。这是我组织它,所以它可以在S.O.上看到。有没有其他更好的方法来显示S.O的表格,除了用html形式表示它或拍摄它的照片? – dlvr
我们所看到的只是原始HTML,除非我们点击运行代码片段。请粘贴数据文本并突出显示该文本,然后单击与{{}}相似的按钮。这将使每行缩进四个空格。反过来以便利的方式呈现您的餐桌,以便我们帮助您 – piRSquared