[英]assign unique ID to each unique value in group after pandas groupby
[英]Subtract unique value for each groupby item in pandas
我有一個具有唯一值(df_values)的數據框,我想從另一個數據框(df)的列中的所有行中減去它
>>> df_values
Id value
0 1 2
1 2 3
2 3 2
>>> df
Id T_air
0 1 2
1 1 4
2 1 2
3 2 3
4 2 4
5 2 3
6 3 4
我可以通過定義這樣的函數來做到這一點:
def conv(x, y, p):
if y == 1:
return x-p[0]
elif y == 2:
return x-p[1]
elif y == 3:
return x-p[2]
df['norm']=df.apply(lambda x : conv(x['T_air'], x['Id'],df_value['value']), axis=1)
所以結果是:
>>> df
Id T_air norm
0 1 2 0
1 1 4 2
2 1 2 0
3 2 3 0
4 2 4 1
5 2 3 0
6 3 4 2
但由於我有這么多 groupby 項目,我想找到一種更簡單的方法來實現這一點。 任何想法都會有所幫助:)
您可以使用map
進行矢量化,不需要groupby
:
df['norm'] = df['T_air'] - df['Id'].map(df_values.set_index('Id')['value'])
輸出:
Id T_air norm
0 1 2 0
1 1 4 2
2 1 2 0
3 2 3 0
4 2 4 1
5 2 3 0
6 3 4 2
將Series.sub
與Series.map
的映射值一起使用:
df['norm'] = df['T_air'].sub(df['Id'].map(df_value.set_index('Id')['value']))
print (df)
Id T_air norm
0 1 2 0
1 1 4 2
2 1 2 0
3 2 3 0
4 2 4 1
5 2 3 0
6 3 4 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.