gpt4 book ai didi

python - 将多列传递给 groupby.transform

转载 作者:行者123 更新时间:2023-11-30 23:32:02 24 4
gpt4 key购买 nike

据我了解,当您使用 DataFrame 列调用 groupby.transform 时,该列将传递给转换数据的函数。但我无法理解的是如何将多个列传递给函数。

people = DataFrame(np.random.randn(5, 5), columns=['a', 'b', 'c', 'd', 'e'], index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
key = ['one', 'two', 'one', 'two', 'one']

现在我可以轻松地贬低数据等,但我似乎无法正确执行的是使用多个列值作为函数的参数来转换组内的数据。例如,如果我想为每个观察添加一个采用值 a.mean() - b.mean() * c 的列“f”,如何使用转换方法来实现这一点。

我尝试过以下变体

people['f'] = float(NA)
Grouped = people.groupby(key)
def TransFunc(col1, col2, col3):
return col1.mean() - col2.mean() * col3
Grouped.f.transform(TransFunc(Grouped['a'], Grouped['b'], Grouped['c']))

但这显然是错误的。我还尝试将函数包装在lambda 中,但也无法完全使其工作。

我能够通过以下方式迭代组来实现结果:

for group in Grouped:
Amean = np.mean(list(group[1].a))
Bmean = np.mean(list(group[1].b))
CList = list(group[1].c)
IList = list(group[1].index)

for y in xrange(len(CList)):
people['f'][IList[y]] = (Amean - Bmean) * CList[y]

但这似乎不是一个令人满意的解决方案,特别是如果索引不唯一。我也知道这必须可以使用 groupby.transform 实现。

概括一下这个问题:如何编写用于转换具有涉及使用多列值的参数的数据的函数?

感谢帮助。

最佳答案

您可以使用apply()方法:

import numpy as np
import pandas as pl
np.random.seed(0)

people2 = pd.DataFrame(np.random.randn(5, 5),
columns=['a', 'b', 'c', 'd', 'e'],
index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
key = ['one', 'two', 'one', 'two', 'one']

Grouped = people2.groupby(key)

def f(df):
df["f"] = (df.a.mean() - df.b.mean())*df.c
return df

people2 = Grouped.apply(f)
print people2

如果你想要一些通用方法:

Grouped = people2.groupby(key)

def f(a, b, c, **kw):
return (a.mean() - b.mean())*c

people2["f"] = Grouped.apply(lambda df:f(**df))
print people2

关于python - 将多列传递给 groupby.transform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19619082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com