MYYA
试穿这款尺码:import pandas as pd# Initialise test dataframedf = pd.DataFrame({'Team 1': ['A', 'B'], 'Team 2': ['B', 'A'], 'winner_count': [1, 1]})# Get the smallest team name (alphabetically)df['First'] = df[['Team 1', 'Team 2']].min(axis=1)# Get the largest team name (alphabetically)df['Second'] = df[['Team 1', 'Team 2']].max(axis=1)# Groupby the teams to sum winner_countsdf = df[['First', 'Second', 'winner_count']].groupby(['First', 'Second']).sum().reset_index()这似乎是一个效率低下的解决方案,所以看看其他人是否想出更好的方法。
Smart猫小萌
IMO 该解决方案应该处理数据框中有两个以上团队的可能性,例如:df = pd.DataFrame({"Team1": ["Afghanistan", "Australia", "Australia", "Belgium", "Afghanistan"], "Team2": ["Australia", "Afghanistan", "Afghanistan", "Afghanistan","Belgium"], "Winner": ["Afghanistan", "Australia", "Australia", "Afghanistan", "Afghanistan"], "winner_count": [1, 1, 1, 1, 1] })我首先会通过新的“团队”列来识别每个团队组合:df.loc[:,"Teams"] = df.apply(lambda x: ", ".join(sorted([x["Team1"],x["Team2"]])), axis=1)然后可以按团队组合进行分组,并将获胜团队放在每个组的顶部:group = df.groupby(by=["Teams","Winner"]).agg({ "Teams":"first", "Team1":"first", "Team2":"first", "winner_count":"sum"}).sort_values(by=["winner_count"], ascending=False)IMO 已经有了“团队”列,两个团队中哪一个是团队 1 或团队 2 并不重要。重复项将被删除:group.drop_duplicates(subset="Teams", inplace=True)还可以通过以下方式删除 MultiIndex ["Teams", "Winner"]:group.reset_index(level=1, drop=True, inplace=True)结果数据框组(没有索引“Teams”):+-------------+------------------------+-----------+-------------+--------------+| Winner | Teams | Team1 | Team2 | winner_count |+-------------+------------------------+-----------+-------------+--------------+| | | | | || Australia | Afghanistan, Australia | Australia | Afghanistan | 2 || Afghanistan | Afghanistan, Belgium | Belgium | Afghanistan | 2 |+-------------+------------------------+-----------+-------------+--------------+