基于可互换出现在两列中的值聚合数据?

Posted

技术标签:

【中文标题】基于可互换出现在两列中的值聚合数据?【英文标题】:Aggregate data based on values appearing in two columns interchangeably? 【发布时间】:2021-02-20 06:54:04 【问题描述】:
      home_team_name     away_team_name  home_ppg_per_odds_pre_game  away_ppg_per_odds_pre_game
0  Manchester United  Tottenham Hotspur                    3.310000                    4.840000
1    AFC Bournemouth        Aston Villa                    0.666667                    3.230000
2       Norwich City     Crystal Palace                    0.666667                   13.820000
3     Leicester City         Sunderland                    4.733333                    3.330000
4            Everton            Watford                    0.583333                    2.386667
5            Chelsea  Manchester United                    1.890000                    3.330000

home_ppg_per_odds_pre_gameaway_ppg_per_odds_pre_game 基本上是相同的指标。前者代表主队的这个指标的值,而后者代表客队的这个指标。我想要每支球队的这个指标的平均值,无论球队是在主场还是客场比赛。在示例 df 中,您将 Manchester United 作为 home_team_name 在 0 中,作为 away_team_name 在 5 中。我想要包含所有这些示例的 Manchester United 的平均值。

df.groupby("home_team_name")["home_ppg_per_odds_pre_game"].mean()

这只会给我带来球队主场比赛的机会,但我想要主场和客场。

【问题讨论】:

【参考方案1】:

由于这两个指标相同,您可以附加主队和客队指标,如下所示:

data_df = pd.concat([df.loc[:,('home_team_name','home_ppg_per_odds_pre_game')], df.loc[:,('away_team_name','away_ppg_per_odds_pre_game')].rename(columns='away_team_name':'home_team_name','away_ppg_per_odds_pre_game':'home_ppg_per_odds_pre_game')])

那么你可以使用groupby获取手段:

data_df.groupby('home_team_name')['home_ppg_per_odds_pre_game'].mean().reset_index()

【讨论】:

好答案。请在您建议的文本解决方案中说明供未来读者遵循。

以上是关于基于可互换出现在两列中的值聚合数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同条件下聚合两个不同列中的值?

SQLAlchemy如何检查值是否在两列中的值之间?

SQL 聚合具有相同 id 的行,辅助列中的特定值

如何对两列求和并通过减去它们的聚合 SQL 和 C# 在第三列中显示结果?

基于两列或多列的 Spark DataFrame 聚合

如何使用 python 在两列中扩展具有日期范围的数据框?