如何分组并将操作聚合到多个列?
Posted
技术标签:
【中文标题】如何分组并将操作聚合到多个列?【英文标题】:How to groupby and aggregate an operation to multiple columns? 【发布时间】:2021-01-07 00:38:06 【问题描述】:我正在尝试根据两列为数据框中的行创建平均值,但出现以下错误:
TypeError: 'numpy.float64' object is not callable
数据框:
date origin positive_score neutral_score negativity_score compound_score
2020-09-19 the verge 0.130 0.846 0.024 0.9833
2020-09-19 the verge 0.130 0.846 0.024 0.9833
2020-09-19 fool 0.075 0.869 0.056 0.8560
2020-09-19 seeking_alpha 0.067 0.918 0.015 0.9983
2020-09-19 seeking_alpha 0.171 0.791 0.038 0.7506
2020-09-19 seeking_alpha 0.095 0.814 0.091 0.9187
2020-09-19 seeking_alpha 0.113 0.801 0.086 0.9890
2020-09-19 seeking_alpha 0.094 0.869 0.038 0.9997
2020-09-19 wall street journal 0.000 1.000 0.000 0.0000
2020-09-19 seeking_alpha 0.179 0.779 0.042 0.9997
2020-09-19 seeking_alpha 0.178 0.704 0.117 0.7360
我的代码:
def mean_indicators(cls, df: pd.DataFrame):
df_with_mean = df.groupby([DATE, ORIGIN], as_index=False).agg(POSITIVE_SCORE: df[POSITIVE_SCORE].mean(),
NEGATIVE_SCORE: df[NEGATIVE_SCORE].mean(),
NEUTRAL_SCORE: df[NEUTRAL_SCORE].mean(),
COMPOUND_SCORE: df[COMPOUND_SCORE].mean()
)
return df_with_mean
【问题讨论】:
【参考方案1】:我认为这应该做你想要的:
def mean_indicators(cls, df: pd.DataFrame):
df_with_mean = df.groupby([DATE, ORIGIN], as_index=False).agg(
POSITIVE_SCORE: "mean",
NEGATIVE_SCORE: "mean",
NEUTRAL_SCORE: "mean",
COMPOUND_SCORE: "mean",
)
return df_with_mean
您也可以使用 here 所见的命名聚合语法
【讨论】:
【参考方案2】: 错误是错误聚合操作的结果。POSITIVE_SCORE: df[POSITIVE_SCORE].mean()
不正确。
'positive_score': 'mean'
是正确的
由于您尝试对所有未分组的数字列取平均值,因此不需要该函数。
使用pandas.core.groupby.GroupBy.mean
对整个数据帧进行一项操作。
使用pandas.core.groupby.DataFrameGroupBy.aggregate
聚合不同的操作。
Applying multiple functions at once
# just groupby and mean
df_mean = df.groupby(['date', 'origin'], as_index=False).mean()
# display(df_mean())
date origin positive_score neutral_score negativity_score compound_score
2020-09-19 fool 0.075000 0.869000 0.056 0.856000
2020-09-19 seeking_alpha 0.128143 0.810857 0.061 0.913143
2020-09-19 the verge 0.130000 0.846000 0.024 0.983300
2020-09-19 wall street journal 0.000000 1.000000 0.000 0.000000
【讨论】:
以上是关于如何分组并将操作聚合到多个列?的主要内容,如果未能解决你的问题,请参考以下文章
如何对多个列上的数据集进行分组并同时进行不同的聚合? Python
pandas编写自定义函数计算多个数据列的加和(sum)使用groupby函数和apply函数聚合计算分组内多个数据列的加和