将索引或列值作为groupby聚合函数中的** KWARG传递

问题描述 投票:1回答:1

我试图在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 groupby上运行聚合函数,在该函数中我将其中一列作为kwarg或arg传递。我可以通过传递常量来做到这一点,但无法弄清楚如何传递列值。 ...

pandas group-by aggregate kwargs
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.