【问题标题】:Subtract fixed row value in reference to column value in pandas dataframe参考熊猫数据框中的列值减去固定行值
【发布时间】:2020-08-10 19:07:11
【问题描述】:

我想在行中减去一个固定的行值,参考它们在另一列中的值。

我的数据如下所示:

       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 列减去 POSITION_X 列的固定行值 (WHEN TIME=0),并使用这些值创建一个新列 ("NEW_POSX")。输出应该是这样的:

       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

我一直在使用以下代码来完成这项工作:

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)

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

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: python pandas group-by subtraction


    【解决方案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
    

    【讨论】:

    • 欢迎您!请考虑accepting,如果有帮助,请点赞! :) @FabianaRossi
    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2020-10-08
    • 2017-02-20
    • 2013-12-10
    • 1970-01-01
    • 2015-07-27
    相关资源
    最近更新 更多