python pandas创建数据帧连胜

问题描述 投票:1回答:1

我需要创建“连胜”栏目。例如,我有如下数据。具有最大值的列是赢家。

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

并且需要创建“连胜;连续赢得多少次”,如下所示。

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

我试图使用“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]})
python pandas itertools pandas-groupby cumsum
1个回答
4
投票

使用:

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

说明:

  1. 首先将eq的所有列与每行的max进行比较
  2. 通过True减去累积总和来计算连续的cumsums
© www.soinside.com 2019 - 2024. All rights reserved.