【问题标题】:Make user defined function compatible with df.groupby Pandas使用户定义的函数与 df.groupby Pandas 兼容
【发布时间】:2021-01-15 01:16:34
【问题描述】:

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

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 是否更好,以便它可以逐行应用,请记住,我将不得不处理具有两种类型的“框架”形式的数据框标识符(而不是 1)但在列中表示?

【问题讨论】:

    标签: pandas function pandas-groupby


    【解决方案1】:

    pandas groupby transform custom function 涵盖了你必须做的事情的大纲。

    你可以这样调用函数

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-08
      • 2013-03-17
      • 2021-12-03
      • 2018-11-10
      • 1970-01-01
      • 2023-02-17
      • 2017-09-15
      • 2020-12-02
      相关资源
      最近更新 更多