3 回答

TA貢獻1815條經驗 獲得超13個贊
如果數據框中有很多行,我會盡量避免使用傳遞axis=1
.?
s1 = np.where(df['Team 2'] > df['Team 1'], df['Team 1'], df['Team 2'])
s2 = np.where(df['Team 2'] < df['Team 1'], df['Team 1'], df['Team 2'])
df['Team 1'] = s1
df['Team 2'] = s2
df = df.groupby(['Team 1', 'Team 2', 'Winner'])['winner_count'].sum().reset_index()
df
Out[1]:?
? ? ? ? Team 1? ? ?Team 2? ? ?Winner? winner_count
0? Afghanistan? Australia? Australia? ? ? ? ? ? ?2

TA貢獻1868條經驗 獲得超4個贊
試穿這款尺碼:
import pandas as pd
# Initialise test dataframe
df = 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_counts
df = df[['First', 'Second', 'winner_count']].groupby(['First', 'Second']).sum().reset_index()
這似乎是一個效率低下的解決方案,所以看看其他人是否想出更好的方法。

TA貢獻1911條經驗 獲得超7個贊
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 |
+-------------+------------------------+-----------+-------------+--------------+
添加回答
舉報