减去 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
with mapping values by 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
我有一个具有唯一值 (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
with mapping values by 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