我有以下数据集,描述了在框架中购买商品的交易(frameNo)。框架包含一分钟内发生的事件。因此," currentGold"值仅描绘了玩家进入框架的黄金价值。
我想要做的是计算每次交易后留下多少黄金。由frameNo分组,因为玩家可以在事件之间产生黄金(在这个例子中是在帧之间)。
gameId platformId frameNo timestamp itemId currentGold Cost
0 948881246 BR1 1.0 4451 2010 500 50
1 948881246 BR1 1.0 5129 1055 500 450
2 948881246 BR1 6.0 302762 1038 1300 1300
3 948881246 BR1 7.0 417640 1001 300 300
4 948881246 BR1 8.0 420211 1036 759 350
5 948881246 BR1 8.0 421285 1036 759 350
6 948881246 BR1 8.0 421904 2010 759 50
7 948881246 BR1 10.0 555882 3133 1220 310
8 948881246 BR1 10.0 557963 1018 1220 800
9 948881246 BR1 10.0 558777 2010 1220 50
10 948881246 BR1 12.0 697438 3508 850 200
11 948881246 BR1 12.0 701438 1051 850 400
12 948881246 BR1 12.0 701796 1042 850 300
13 948881246 BR1 12.0 703291 2010 850 50
14 948881246 BR1 15.0 848427 3086 1397 500
15 948881246 BR1 15.0 849077 3006 1397 500
16 948881246 BR1 15.0 851125 3363 1397 0
这是我想要达到的结果:
gameId platformId frameNo timestamp itemId currentGold Cost availGold
0 948881246 BR1 1.0 4451 2010 500 50 500
1 948881246 BR1 1.0 5129 1055 500 450 450
2 948881246 BR1 6.0 302762 1038 1300 1300 1300
3 948881246 BR1 7.0 417640 1001 300 300 300
4 948881246 BR1 8.0 420211 1036 759 350 759
5 948881246 BR1 8.0 421285 1036 759 350 409
6 948881246 BR1 8.0 421904 2010 759 50 59
7 948881246 BR1 10.0 555882 3133 1220 310 1220
8 948881246 BR1 10.0 557963 1018 1220 800 910
9 948881246 BR1 10.0 558777 2010 1220 50 110
10 948881246 BR1 12.0 697438 3508 850 200 850
11 948881246 BR1 12.0 701438 1051 850 400 650
12 948881246 BR1 12.0 701796 1042 850 300 350
13 948881246 BR1 12.0 703291 2010 850 50 50
14 948881246 BR1 15.0 848427 3086 1397 500 1397
15 948881246 BR1 15.0 849077 3006 1397 500 897
16 948881246 BR1 15.0 851125 3363 1397 0 397
我试图通过iterrows()进行迭代,但是,我认为以前无法访问该行,并且对(gameId,platformId,frameNo)键的依赖性给了我一些头痛
答案 0 :(得分:1)
您可能在以下行的“所需”输出中出现错误吗?
948881246 BR1 12.0 701438 1051 850 400 650
948881246 BR1 12.0 701796 1042 850 300 350
948881246 BR1 12.0 703291 2010 850 50 50
根据您描述的逻辑和之前的行,最后一列(availGold
)在第二行应为250
,最后一行为-50
。如果是这种情况,您可以使用cumsum
和shift
:
df['frameCost'] = df.groupby(['gameId', 'platformId', 'frameNo'])['Cost'].cumsum()
df['availGold'] = df['currentGold'] - df.groupby(['gameId', 'platformId', 'frameNo'])['frameCost'].shift(1).fillna(0)