使用户定义的函数与df兼容.groupby熊猫



假设我有一个函数,它对某个数据帧执行一些计算,其中索引是要考虑的变量,列是年份。例如

df:
       1980    1981    1982 .....
var1
var2
var3
.
.
.   
def fun(col_df):
    var_new=var1+var2/var3
    var_new+=df.iloc[:,df.columns.get_loc(col_df+1)].iloc['var_new']

现在假设我有一个数据框,frame,其中的观测值是按年份和ID变量确定的。这些标识符被处理为列。

frame:
        date  ID  var1 var2 var3...
0       1980  1   
1       1980  2
2       1981  1
3       1981  2
4       1982  1
5       1982  2
.
.
.   

我想使函数fun与pandas中的groupby()方法兼容。特别是,我的想法是运行

frame.groupby('ID').transform('fun')

之后,我将frame转化为与df相同的形式,以便fun可以毫无问题地应用。我该怎么做呢?重写函数fun以便可以逐行应用,是否更好,请记住,我将不得不处理````框架' ' '形式的数据帧,它有2种类型的标识符(而不是1),但在列中表示?

pandas groupby transform自定义函数涵盖了您必须执行的操作的大纲。

你可以像这样调用一个函数

def f(x, col):
    return df.loc[x.index, col]*x
df['g'] = df.groupby('b')['c'].transform(f, col='d')
print(df)

调用外部数据并通过转换获得传递参数。

最新更新