我有一个这样的熊猫数据框。
>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']
但是结果似乎不好。你如何做到的?
答案 0 :(得分:1)
将transform
与first
一起使用,以返回与原始Series
相同的长度df
:
data['Time'] = data['Distance'] /data.groupby('ID')['Speed'].transform('first')
或将drop_duplicates
与map
一起使用:
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