【问题标题】:calculate value based on value from previous value根据先前值的值计算值
【发布时间】:2018-03-09 19:38:06
【问题描述】:

我给出了以下数据集,描述了在框架 (frameNo) 中购买物品的交易。该框架包含在一分钟内发生的事件。因此,“currentGold”值仅描述玩家进入框架的金币值。

我要做的是计算每次交易后还剩下多少黄金。按帧号分组,因为玩家可以在事件之间产生金币(在这个例子中是在帧之间)。

           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) 键的依赖让我有些头疼

【问题讨论】:

    标签: python-3.x pandas pandas-groupby cumulative-sum


    【解决方案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。如果是这种情况,您可以使用cumsumshift 来实现:

    df['frameCost'] = df.groupby(['gameId', 'platformId', 'frameNo'])['Cost'].cumsum()
    df['availGold'] = df['currentGold'] - df.groupby(['gameId', 'platformId', 'frameNo'])['frameCost'].shift(1).fillna(0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      相关资源
      最近更新 更多