Python熊猫使用自定义agg函数通过groupby创建新列

拉登科夫·弗拉迪斯拉夫

我的数据框:

from random import random, randint
from pandas import DataFrame

t = DataFrame({"metasearch":["A","B","A","B","A","B","A","B"],
                   "market":["A","B","A","B","A","B","A","B"],
                   "bid":[random() for i in range(8)],
                   "clicks": [randint(0,10) for i in range(8)],
                   "country_code":["A","A","A","A","A","B","A","B"]})

我想为每个设置LinearRegression market,所以我:

1)组df- groups = t.groupby(by="market")

2)准备要适合模型的功能-

from sklearn.linear_model import LinearRegression
def group_fitter(group):
    lr = LinearRegression()
    X = group["bid"].fillna(0).values.reshape(-1,1)
    y = group["clicks"].fillna(0)
    lr.fit(X, y)
    return lr.coef_[0] # THIS IS A SCALAR

3)创建一个新的Series,market其索引和coef值为:

s = groups.transform(group_fitter) 

但是第3步失败: KeyError :(“ bid_cpc”,“在出价时发生”)

耶斯列尔

我认为您需要transform使用,apply因为在函数中同时使用更多的列,并且需要使用新的列join

from sklearn.linear_model import LinearRegression
def group_fitter(group):
    lr = LinearRegression()
    X = group["bid"].fillna(0).values.reshape(-1,1)
    y = group["clicks"].fillna(0)
    lr.fit(X, y)
    return lr.coef_[0] # THIS IS A SCALAR

groups = t.groupby(by="market")
df = t.join(groups.apply(group_fitter).rename('new'), on='market')
print (df) 
        bid  clicks country_code market metasearch       new
0  0.462734       9            A      A          A -8.632301
1  0.438869       5            A      B          B  6.690289
2  0.047160       9            A      A          A -8.632301
3  0.644263       0            A      B          B  6.690289
4  0.579040       0            A      A          A -8.632301
5  0.820389       6            B      B          B  6.690289
6  0.112341       5            A      A          A -8.632301
7  0.432502       0            B      B          B  6.690289

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在熊猫中使用自定义聚合函数在数据框中创建新列

Pandas Groupby并使用自定义值创建新列

通过自定义函数在循环中创建新的均值列

Pandas groupby 和自定义 agg lambda 函数

熊猫GroupBy通过自定义函数中的两个数据框进行定义

在熊猫中使用 2 列的自定义聚合函数

使用apply()自定义函数创建新列时的Pandas内存错误

自定义函数中未分配的新列 (Python)

使用自定义参数创建列函数

如何在python上使用自定义拆分创建新列

Pandas数据框:使用其他2列创建一个新列,该列是自定义函数

熊猫自定义二级groupby函数

尝试使用 numpy 在 Python 中创建自定义函数

熊猫使用groupby的计数创建新列

熊猫,使用groupby值创建新列

带有自定义聚合函数的pandas groupby()并将结果放入新列中

通过自定义函数创建2列并将其追加到数据框-Python 3.x

为熊猫创建自定义插值函数

Pandas:通过在行级别应用自定义函数来创建列

大熊猫:使用基于不同DF的自定义列创建DF

Pandas DataFrame.Groupby.Agg词典中的自定义列选择

熊猫groupby转换自定义功能

Groupby应用自定义功能熊猫

如何使用新函数创建自定义链式过滤器方法

通过扩展和自定义功能使用groupby

如何使用 VSTO 通过 API Javascript 创建 Excel 自定义函数?

使用自定义函数计算熊猫的每日总量

在自定义函数中使用熊猫to_datetime

使用自定义聚合函数提高 pandas groupby 的效率