我有一只熊猫的资料,里面有体育比赛:
Winner Loser
A B
B A
A C我想有每个球员的输赢统计数据(即A,B和C)。所以对于A来说,结果应该是2-1.对于B应该是1-1,对于C应该是0-1。
我知道如何通过在dataframe上逐行迭代来计算这个值:
for index, match in df.iterrows():
//code for calculating win-loss here但我确信还有更多的仿生/熊猫的方法可以做到这一点吗?如有任何提示,我们将不胜感激。
发布于 2015-05-14 11:18:15
您可以使用groupby方法和size聚合来执行此操作。
例如
print df.groupby('Loser').size()会产生一个有损失数量的数据。
Loser
A 1
B 1
C 1
dtype: int64然后,您可以按照如下方式将它们组合成分数计数(如果团队没有胜诉或输赢,则使用fillna方法设置默认值)
wins = df.groupby('Winner').size()
losses = df.groupby('Loser').size()
scores = pd.DataFrame({'Wins' : wins, 'Losses' : losses}).fillna(0)最后的分数算作
Losses Wins
A 1 2
B 1 1
C 1 0发布于 2015-05-14 11:19:03
在这样做的过程中:
win = df.groupby('Winner').count()
los = df.groupby('Loser').count()
score = pd.DataFrame([win.Loser, los.Winner])
score给予:
A B C
Loser 2 1 0
Winner 1 1 1以及:
score.T显示它已转置:
Loser Winner
A 2 1
B 1 1
C 0 1这是上面使用的数据格式:
df = pd.DataFrame({'Winner': list('ABA'),
'Loser': list('BAC')})
df
Loser Winner
0 B A
1 A B
2 C A所有这些都在一行中:
pd.DataFrame([df.groupby('Winner').count().Loser,
df.groupby('Loser').count().Winner]).fillna(0).T在以下方面的成果:
Loser Winner
A 2 1
B 1 1
C 0 1发布于 2015-05-14 11:21:07
您希望您的结果采用什么格式?
计算输赢的一个简单方法是使用collections.Counter:
import pandas as pd
from collections import Counter
df=pd.DataFrame([['A','B'],['B','C'],['A','C']], columns=['winner','loser'])
win_counts = Counter(df['winner'])win_counts是一本字典,如下所示:
Counter({'A': 2, 'B': 1})不过,我更喜欢西蒙吉本斯以上的答案,因为它不需要额外的模块。
https://stackoverflow.com/questions/30235591
复制相似问题