这将计算每个站点的几何平均值并检查其是否大于30:>>> df['geo_mean_acceptable'] = (
df.groupby('Site')
.transform(lambda group: group.prod() ** (1 / float(len(group))) > 30)
.astype(bool))
这是每个站点的几何平均值:
^{pr2}$
使用scipy的几何平均值函数:from scipy.stats.mstats import gmean
>>> df.groupby('Site').EnteroCount.apply(gmean)
Site
A 68.016702
B 121.981006
C 180.000000
Name: EnteroCount, dtype: float64
鉴于五个最高值将为您提供一组中最高的几何平均值,您可以使用以下方法:df.groupby('Site').EnteroCount.apply(lambda group: gmean(group.nlargest(5)))
您可以看到它是如何按组选择最大的五个值,然后将它们用作gmean的参数:>>> df.groupby('Site').EnteroCount.apply(lambda group: group.nlargest(5).values.tolist())
Site
A [1733, 150, 70, 20, 4]
B [1500, 55, 22]
C [180]
Name: EnteroCount, dtype: object
摘要df['swim'] = np.where(
(df.groupby('Site').EnteroCount.transform(max) > 110) |
(df.groupby('Site').EnteroCount.transform(lambda group: gmean(group.nlargest(5))) > 30),
'unacceptable', 'acceptable')