在熊猫数据框上编写功能

时间:2019-08-05 05:46:34

标签: python-3.x

我在excel中有数据,其中有两列“峰值”和“标签”。我想基于“峰值”列在“标签”列中添加值。 因此,输入看起来像下面的

Peak Value 0 0 0 88 0 0 88 0 0 88 0
Label      0 0 0  0 0 0 0  0 0 0 0

输入

只要“峰值”中的值大于零,就会在“标签”中加1并替换其下的所有零。对于下一个大于零的值,应将其递增为2,并将所有零替换为2。

因此,输出将如下所示:

Peak Value 0 0 0 88 0 0 88 0 0 88 0
Label      0 0 0  1 1 1  2 2 2  3 3

输出

以此类推。...

我尝试编写函数,但是当“峰值”中的值大于0时,我只能加1。

def funct(row):
    if row['Peak Value']>0:
        val = 1
    else:
        val = 0
    return val

df['Label']= df.apply(funct, axis=1)

1 个答案:

答案 0 :(得分:0)

也许您可以尝试使用cumsumffill

import numpy as np

df['Labels'] = (df['Peak Value'] > 0).groupby(df['Peak Value']).cumsum()
df['Labels'] = df['Labels'].replace(0, np.nan).ffill().replace(np.nan, 0).astype(int)

输出:

    Peak Value  Labels
0            0       0
1            0       0
2            0       0
3           88       1
4            0       1
5            0       1
6           88       2
7            0       2
8            0       2
9           88       3
10           0       3