我有一个来自excel文件的简化数据框
Team match1 game12 match3
1 Sandhausen 2 3 1
2 Pohlheim 1 1 6
3 Völklingen 4 2 4
4 Nieder-Olm/Wörrstadt 5 7 2
5 Nümbrecht 7 6 3
6 Dorheim 3 4 7
7 Nienburg/Weser 6 5 5
8 Bad Homburg 8 8 8
9 Bad Homburg 9 9 9
我想计算出最好的球队。 比赛数据代表球队的位置。 要计算最佳团队,1.位置获得9分2.位置获得8分,依此类推。 这适用于所有比赛。
我的问题是match1可能是一个完全不同的名称,是否可以使用索引?
更新我同时使用了两个答案:
创建类似这样的内容:
count_row = df.shape[0]
df["score"] = (count_row+1 - df.drop(columns='Team')).sum(axis=1)
df['extra_points'] = (df ==1).sum(axis=1)
df['total'] = df.loc[:,['score','extra_points']].sum(axis=1)
df_total = df.groupby("Team").agg({"total": "sum"}).reset_index().sort_values(by='total', ascending=False)
print(df)
print(df_total)
答案 0 :(得分:1)
更新,计算每列的最佳团队:
df.set_index('Team').idxmax()
match1 BadHomburg
game12 BadHomburg
match3 BadHomburg
dtype: object
如果Team
列中有重复团队,并且您想要 sum ,我将DataFrame.melt
与groupby.sum
一起使用:>
df_ranking = ( df.melt('Team')
.groupby('Team')['value']
.sum()
.sort_values(ascending = False)
.to_frame('Points')
.reset_index() )
df_ranking.index = df_ranking.index + 1
print(df_ranking)
Team Points
1 BadHomburg 42.0
2 Nümbrecht 16.0
3 Nienburg/Weser 16.0
4 Nieder-Olm/Wörrstadt 14.0
5 Dorheim 14.0
6 Völklingen 10.0
7 Pohlheim 8.0
8 Sandhausen 6.0
检查最佳团队
df_ranking.loc[1,'Team']
#'BadHomburg'
答案 1 :(得分:1)
您也可以这样:
df = pd.DataFrame([
['Sandhausen',2,3,1],
['Pohlheim',1,1,6],
['Völklingen',4,2,4],
['Nieder-Olm/Wörrstadt',5,7,2],
['Nümbrecht',7,6,3],
['Dorheim',3,4,7],
['Nienburg/Weser',6,5,5],
['Bad Homburg',8,8,8],
['Bad Homburg',9,9,9]
],
columns=["Team", "match1", "game12", "match2"])
df["score"] = ( 10 - df.drop(columns=["Team"]) ).sum(axis=1)
基本上在这里,我选择应考虑得分的所有列(在这种情况下,除列Team
以外的所有列)[df.drop(columns=["Team"])
]。
然后,我将等级转换为得分(等级1-> 10-1 = 9,等级2-> 10-2 = 8,...,等级9-> 10-9 = 1)[ ( 10 - ... )
。
此后,我对行(axis = 1)上的所有值求和,并将其分配给列score
[df["score"] = (...).sum(axis=1)
]。
结果如下:
Team match1 game12 match2 score
0 Sandhausen 2 3 1 24
1 Pohlheim 1 1 6 22
2 Völklingen 4 2 4 20
3 Nieder-Olm/Wörrstadt 5 7 2 16
4 Nümbrecht 7 6 3 14
5 Dorheim 3 4 7 16
6 Nienburg/Weser 6 5 5 14
7 Bad Homburg 8 8 8 6
8 Bad Homburg 9 9 9 3
此外,如果您希望选择要使用的列而不是删除列,则可以使用以下内容:
df[[ col for col in df.columns if col != "Team" ]]
col != "Team"
中正在进行过滤,但是您可以更改它。