首页 > 解决方案 > 熊猫:两列的累积计数

问题描述

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

我正在尝试根据他们的名字在获胜者或失败者列中的出现来建立一个球员参加了多少场比赛的连续计数(即,Dave上面有一个3从他参加每场比赛以来的连续计数)。我是 pandas 的新手,并尝试了一些组合,cumcountgroupby我不确定我是否只需要手动循环数据集并自己存储所有名称。

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

标签: pythonpandas

解决方案


首先创建MultiIndex Series者,DataFrame.stack然后GroupBy.cumcountDataFrame添加:unstackadd_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

最后附加到原始DataFrame作者join

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

推荐阅读