假设我有一个函数,它对某个数据帧执行一些计算,其中索引是要考虑的变量,列是年份。例如
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)
调用外部数据并通过转换获得传递参数。