大熊猫数据帧合计计算
我有一个包含体育比赛一个大熊猫数据帧:大熊猫数据帧合计计算
Winner Loser
A B
B A
A C
我想为每一个玩家的输赢统计(即A,B,和C)。所以对于A来说结果应该是2-1。对于B应该是1-1,对于C应该是0-1。
我知道如何通过迭代行由行过与数据框计算这个
for index, match in df.iterrows():
//code for calculating win-loss here
,但我相信,有一个更Python /大熊猫十岁上下的方式做到这一点?任何关于此的提示都表示赞赏。
您可以使用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
对的方式做这件事:
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
铝l在一个行:
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
hm。代码似乎卡在“los = df.groupby('Loser')。count()”? – beta
@beta粘贴错误的版本。更新它。 –
你想要什么格式的结果?
一种简单的方式来计算的战绩是使用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})
不过,我更喜欢西蒙·吉本斯回答因为它不需要额外的模块。
谢谢。完美解决方案现在我只想通过改变胜负列来美化它。 – beta
在上面的评论中回答我的问题。这工作:'scores = scores.reindex_axis(['wins','loss'],axis = 1)' – beta