python pandas创建数据帧连胜

时间:2018-04-24 10:26:20

标签: python pandas itertools pandas-groupby cumsum

我需要创造连胜纪录。列。 例如, 我有如下数据。具有最大值的列是赢家。

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

需要创造连胜;多少次连胜#34;每个列的列如下。

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" library(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]})

1 个答案:

答案 0 :(得分: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. 通过cumsum
  3. 减去累计总和来计算连续True