Mak*_*aki 1 python dataframe pandas 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
Run Code Online (Sandbox Code Playgroud)
我想通过GROUPBY表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
Run Code Online (Sandbox Code Playgroud)
我的尝试:
data['Time'] = data['Distance'] / data.loc[data.groupby('ID')['Speed'].head(1).index, 'Speed']
Run Code Online (Sandbox Code Playgroud)
但结果似乎并不好。你怎么做呢?
使用transformwithfirst返回与Series原始长度相同的长度df:
data['Time'] = data['Distance'] /data.groupby('ID')['Speed'].transform('first')
Run Code Online (Sandbox Code Playgroud)
或者使用drop_duplicates具有map:
s = data.drop_duplicates('ID').set_index('ID')['Speed']
data['Time'] = data['Distance'] / data['ID'].map(s)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |