参照熊猫数据框中的列值减去固定的行值

时间:2020-08-10 19:07:11

标签: python pandas group-by subtraction

我想参考另一列中的行值减去行中的固定行值。

我的数据如下:

implementation 'com.google.android.material:material:1.2.0'

我想参考TRACK列减去POSITION_X列的固定行值(当TIME = 0时),并使用这些值创建一个新列(“ NEW_POSX”)。输出应如下所示:

       TRACK    TIME  POSITION_X
0        1        0       12       
1        1        30      13       
2        1        60      15       
3        1        90      11      
4        2         0      10     
5        2        20      11
6        2        60      13
7        2        90      17

我一直在使用以下代码来完成此任务:

       TRACK    TIME  POSITION_X   NEW_POSX
0        1        0       12         0   
1        1        30      13         1
2        1        60      15         3
3        1        90      11        -1
4        2         0      10         0
5        2        20      11         1
6        2        60      13         3
7        2        90      17         7

...但是我没有得到想要的输出。相反,我得到了一个新列,其中的每一行都被上一行减去(根据“ TRACK”列):

import pandas as pd

data = {'TRACK':  [1,1,1,1,2,2,2,2],
        'TIME': [0,30,60,90,0,20,60,90],
        'POSITION_X': [12,13,15,11,10,11,13,17],
        }

df = pd.DataFrame (data, columns = ['TRACK','TIME','POSITION_X'])
df['NEW_POSX']= df.groupby('TRACK')['POSITION_X'].diff().fillna(0).astype(int)
df.head(8)

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用transformfirst来获取时间0处的值,然后将其减去到'POSITION_X'列中:

s=df.groupby('TRACK')['POSITION_X'].transform('first')
df['NEW_POSX']=df['POSITION_X']-s

#Same as: 
#df['NEW_POSX']=df['POSITION_X'].sub(s)

输出:

df
   TRACK  TIME  POSITION_X  NEW_POSX
0      1     0          12         0
1      1    30          13         1
2      1    60          15         3
3      1    90          11        -1
4      2     0          10         0
5      2    20          11         1
6      2    60          13         3
7      2    90          17         7