大熊猫:来自两列的累计计数

时间:2018-08-11 11:22:55

标签: python pandas

winner  loser   winner_matches  loser_matches
Dave    Harry   1               1
Jim     Dave    1               2
Dave    Steve   3               1

我正在尝试根据玩家在获胜者或失败者栏中的名字出现情况来计算玩家参加过多少场比赛(例如,上面的Dave的跑步次数为{{1 }},因为他参加过每场比赛。我是熊猫的新手,并尝试过3cumcount的几种组合,但是我不确定是否只需要手动遍历数据集并自己存储所有名称。

编辑:澄清一下,我需要如上所述的数据框中的运行总计,而不仅仅是以后打印的系列!谢谢

2 个答案:

答案 0 :(得分:1)

首先由DataFrame.stack创建MultiIndex Series,然后为DataFrame创建GroupBy.cumcount,并用unstack添加add_suffix

print (df)
  winner  loser
0   Dave  Harry
1    Jim   Dave
2   Dave  Steve

s = df.stack()
#if multiple columns in original df
#s = df[['winner','loser']].stack()
df1 = s.groupby(s).cumcount().add(1).unstack().add_suffix('_matches')
print (df1)
   winner_matches  loser_matches
0               1              1
1               1              2
2               3              1

最后join附加到原始DataFrame

df = df.join(df1)
print (df)
  winner  loser  winner_matches  loser_matches
0   Dave  Harry               1              1
1    Jim   Dave               1              2
2   Dave  Steve               3              1

答案 1 :(得分:0)

您需要flatten

 pd.Series(df[['winner','loser']].values.flatten()).value_counts()
 [out]
 Dave     3
 Jim      1
 Harry    1
 Steve    1