在熊猫中,我如何使用转换并使用其他列中的信息?

时间:2019-06-24 19:32:45

标签: python pandas

我想使用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

1 个答案:

答案 0 :(得分:2)

我们可以说transform几乎等于R mutate中的dplyr,但是在groupby object下,它们仍然略有不同,{ {1}}可以通过一个,transform可以通过多个,More info


快速修复

mutate