winner loser winner_matches loser_matches
Dave Harry 1 1
Jim Dave 1 2
Dave Steve 3 1
我正在尝试根据玩家在获胜者或失败者栏中的名字出现情况来计算玩家参加过多少场比赛(例如,上面的Dave
的跑步次数为{{1 }},因为他参加过每场比赛。我是熊猫的新手,并尝试过3
和cumcount
的几种组合,但是我不确定是否只需要手动遍历数据集并自己存储所有名称。
编辑:澄清一下,我需要如上所述的数据框中的运行总计,而不仅仅是以后打印的系列!谢谢
答案 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