【问题标题】:Passing an Index or column value as a **KWARG in groupby aggregate function在 groupby 聚合函数中将索引或列值作为 **KWARG 传递
【发布时间】:2017-08-16 01:46:20
【问题描述】:

我正在尝试在 pandas groupby 上运行聚合函数,其中我将其中一列作为 kwarg 或 arg 传递。我可以通过传递一个常量来做到这一点,但不知道如何传递一个列值。

例如

import pandas as pd
import datetime
import numpy as np

def sum_corr(vector, cor):
    a = vector.tolist()
    radicand = sum([a[i]*a[j] * (1 if i == j else cor) for i in range(len(a)) for j in range(len(a))])
    return np.sqrt(radicand)

my_table = pd.DataFrame({'Date':4*pd.bdate_range(datetime.datetime(2017,1,1),periods=4).tolist(),
                      'Name':[i for i in 'abcd' for j in range(4)],
                      'corr':[i for i in [0,1,.5,.8] for j in range(4)],
                      'vals':[1,2,3,4]*4})

我可以用一个常量来调用它没问题

print(my_table.groupby(['Name','corr'],as_index=False).agg(sum_corr,**{'cor':0}))

  Name  corr      vals
0    a   0.0  5.477226
1    b   1.0  5.477226
2    c   0.5  5.477226
3    d   0.8  5.477226

我想在 'corr' 列中调用这个传递类似于

print(my_table.groupby(['Name','corr'],as_index=False).agg(sum_corr,**{'cor':my_table['corr']}))

  Name  corr      vals
0    a   0.0  5.477226
1    b   1.0  10
2    c   0.5  8.062258
3    d   0.8  9.273618

提前致谢!

【问题讨论】:

    标签: pandas group-by aggregate keyword-argument


    【解决方案1】:

    这里的问题不是传递列,问题是 sum_corr() 在传递列时返回一个数组,如果你想在 agg() 中将它用于 groupby,它应该返回聚合(标量)值对象。

    例如,如果您将 sum_corr() 中的最后一行从

    return np.sqrt(radicand)
    

    到

    return np.sum(np.sqrt(radicand))
    

    然后你的函数返回一个标量,并且

    print(my_table.groupby(['Name','corr'],as_index=False).agg(sum_corr,**{'cor':my_table['corr']}))
    

    不会产生错误:

    Name  corr        vals
    0    a   0.0  131.252407
    1    b   1.0  131.252407
    2    c   0.5  131.252407
    3    d   0.8  131.252407
    

    此示例可能不是您想要实现的,但它说明您可以在 groupby.agg() 中将列作为 kwarg 传递。

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 2019-01-22
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2018-10-17
      • 2019-10-31
      • 2020-11-04
      • 2018-01-12
      相关资源
      最近更新 更多