Python熊猫:groupby,并按每个组的第一个值

时间:2018-06-27 08:15:31

标签: python pandas dataframe pandas-groupby

我有一个这样的熊猫数据框。

>data

ID Distance   Speed
1  100        40
1  200        20
1  200        10
2  400        20
2  500        30
2  100        40
2  600        20
2  700        90
3  800        80
3  700        10
3  400        20

我想按ID对表进行分组,并通过将time列中的每个值除以Distance列的第一行来创建新列Speed每个ID组中的每个。因此结果应如下所示。

>data

ID Distance   Speed   Time
1  100        40       2.5
1  200        20         5
1  200        10         5
2  400        20        20
2  500        30        25
2  100        40         5
2  600        20        30
2  700        90        35
3  800        80        10
3  700        10      8.75
3  400        20         5

我的尝试

data['Time'] = data['Distance'] / data.loc[data.groupby('ID')['Speed'].head(1).index, 'Speed']

但是结果似乎不好。你如何做到的?

1 个答案:

答案 0 :(得分:1)

transformfirst一起使用,以返回与原始Series相同的长度df

data['Time'] = data['Distance'] /data.groupby('ID')['Speed'].transform('first')

或将drop_duplicatesmap一起使用:

s = data.drop_duplicates('ID').set_index('ID')['Speed']
data['Time'] = data['Distance'] / data['ID'].map(s)

print (data)
    ID  Distance  Speed   Time
0    1       100     40   2.50
1    1       200     20   5.00
2    1       200     10   5.00
3    2       400     20  20.00
4    2       500     30  25.00
5    2       100     40   5.00
6    2       600     20  30.00
7    2       700     90  35.00
8    3       800     80  10.00
9    3       700     10   8.75
10   3       400     20   5.00