【发布时间】:2020-11-24 14:16:53
【问题描述】:
我有一个包含四列的数据集,类似于下面显示的前四列。我想添加另一列显示某些组的“价格”值的几何平均值,其中每个组由“类型”列确定。
我该怎么做?结果将是一个类似于下面标记为“geomean_price_bytype”的列。
【问题讨论】:
我有一个包含四列的数据集,类似于下面显示的前四列。我想添加另一列显示某些组的“价格”值的几何平均值,其中每个组由“类型”列确定。
我该怎么做?结果将是一个类似于下面标记为“geomean_price_bytype”的列。
【问题讨论】:
将GroupBy.transform 与gmean 一起使用:
from scipy.stats.mstats import gmean
#if necessary remove `,` and `$`
#df['price'] = df['price'].str.lstrip('$').str.replace(',', '').astype(int)
df['new'] = df.groupby('type')['price'].transform(gmean)
或自定义 lambda 函数:
gmean1 = lambda x: x.product() ** (1 / float(len(x)))
df['new'] = df.groupby('type')['price'].transform(gmean1)
【讨论】:
所以基本上你有三个组。您想基于该组创建一个新列。
def meanByGroup(x):
if x == 111:
return 245474
elif x == 222:
return 194223
elif x == 333:
return 124122
然后df["geomean_price_bytype"] = df["type"].apply(meanByGroup)
【讨论】: