B.A*_*.A. 1 python python-itertools pandas cumsum pandas-groupby
我需要创建“连胜”专栏。例如,我有如下数据。具有最大值的列是获胜者。
AA BB CC
5.95 5.95 0
0 -2.35 2.35
-0.6 -0.6 -0.6
-2.35 2.35 0
-1.6 1.6 -1.6
-1.25 1.25 1.25
1.85 0 -1.85
1.3 0 -1.3
-1.7 1.7 -1.7
0 0.25 0.25
Run Code Online (Sandbox Code Playgroud)
并需要创建“连胜;连续获胜多少次”列,如下所示。
AA BB CC CW_AA CW_BB CW_CC
5.95 5.95 0 1 1 0
0 -2.35 2.35 0 0 1
-0.6 -0.6 -0.6 1 1 2
-2.35 2.35 0 0 2 0
-1.6 1.6 -1.6 0 3 0
-1.25 1.25 1.25 0 4 1
1.85 0 -1.85 1 0 0
1.3 0 -1.3 2 0 0
-1.7 1.7 -1.7 0 1 0
0 0.25 0.25 0 2 1
Run Code Online (Sandbox Code Playgroud)
我尝试使用“itertools”库(groupby)来实现它,但还不能。有人可以帮我吗?
pd.DataFrame({'AA':[5.95, 0, -0.6, -2.35, -1.6, -1.25, 1.85, 1.3, -1.7, 0],
'BB':[5.95, -2.35, -0.6, 2.35, 1.6, 1.25, 0, 0, 1.7, 0.25],
'CC':[0, 2.35, -0.6, 0, -1.6, 1.25, -1.85, -1.3, -1.7, 0.25]})
Run Code Online (Sandbox Code Playgroud)
使用:
a = df.eq(df.max(axis=1), axis=0)
b = a.cumsum()
df = b - b.where(~a).ffill().fillna(0).astype(int)
print (df)
AA BB CC
0 1 1 0
1 0 0 1
2 1 1 2
3 0 2 0
4 0 3 0
5 0 4 1
6 1 0 0
7 2 0 0
8 0 1 0
9 0 2 1
Run Code Online (Sandbox Code Playgroud)
解释: