我想使用R样式的mutate函数,在这里我可以使用其他列中的信息。例如:我想创建一个新列,其值是首先对变量进行分组,然后在同一数据帧中对一个列与另一个列进行插值的结果。每个列的新列将获得相同的值。
我尝试在广播中使用Apply,但是它只会产生NaN值。
import pandas as pd
import numpy as np
d = {'Gain': [20, 20,19,18,17,21,21,20,19,18],
'Power':[30,31,32,33,34,33,34,35,36,37],
'GRP': ['A','A','A','A','A','B','B','B','B','B'],
}
df = pd.DataFrame(data=d)
# Subtract the value of Gain from the maximum value: THIS STEP WORKS
df['dGain']=df.groupby(['GRP'])['Gain'].transform(lambda x: max(x) - x)
# DOES NOT WORK!!!
df['Pcomp']=df.groupby(['GRP']).transform(lambda x:
np.interp(3,x.dGain,x.Power))
# DOES NOT WORK
df['Pcomp']=df.groupby(['GRP']).apply(lambda x: np.interp(3,x.dGain,x.Power))
我期望:
Gain Power GRP Pcomp dGain
0 20 30 A 33 0
1 20 31 A 33 0
2 19 32 A 33 1
3 18 33 A 33 2
4 17 34 A 33 3
5 21 33 B 36 0
6 21 34 B 36 0
7 20 35 B 36 1
8 19 36 B 36 2
9 18 37 B 36 3
答案 0 :(得分:2)
我们可以说transform
几乎等于R mutate
中的dplyr
,但是在groupby
object
下,它们仍然略有不同,{ {1}}可以通过一个,transform
可以通过多个,More info
快速修复
mutate