问题描述
我想参考另一列中的行值减去行中的固定行值。
我的数据如下:
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,2,2],'TIME': [0,30,60,90,20,90],'POSITION_X': [12,13,15,11,10,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)
有人可以帮我吗?
解决方法
您可以使用transform
和first
来获取时间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