【问题标题】:python pandas create dataframe winning streakpython pandas创建数据框连胜
【发布时间】:2018-04-24 10:26:19
【问题描述】:

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

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】:

    用途:

    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. 首先将所有列按eqmax 每行进行比较
    2. 通过用cumsum 减去累积和来计算连续的Trues

    【讨论】:

    • 再次感谢!是的,这正是我想要的!
    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2018-11-13
    • 2021-12-02
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多