我想创建一个新变量,它是数据框架子组中两个变量的点积。我知道,当我想要创建一个组级变量时,我可以使用transform
方法。例如,在数据集auto
(下载)中,我可以按如下方式平均品牌的价格:
import pandas as pd
import numpy as np
df = pd.read_csv("auto.csv")
#creates the brand variable
df['brand']=[k [0] for k in df.make.str.split ("")]
# average prices
df['price_mean']=df.groupby("brand")['price'].transform(np.mean)
df.head()
结果:
price_mean3 2.5 AMC 4215.67 AMC 4215.67AMC 4215.673 4.5 别克 6075.29 别克 6075.29
你可以尝试用管道连接一个函数来覆盖转换部分:
def np_dot(grp, columns):
columns = [grp[column].transform(lambda x: x) for column in columns]
return np.dot(*columns)
(
df.assign(
brand=df.make.str.split().str[0],
price_mean=lambda df: df.groupby("brand").price.transform("mean"),
size=np.where(df.length > 200, 1, 0),
)
.query('make.str.contains("Olds")', engine="python")
.assign(result=lambda df: df.groupby("brand").pipe(np_dot, ["price", "size"]))
)