在 pandas 中生成一个新列 - 有条件地增加整数计数

Generate a new column in pandas - conditionaly increase integer count

我想要一个 pandas 的数据框,如下所示: Required Dataframe

A 列 - 根据这些值,我想生成一个新变量 - B 列。

一直以来,当值发生变化时,应该"Step_(new_number)" 做出。所以第一个零值是 Step_1,然后下一个值应该是 Step_2,然后其他带有数字的行应该是 Step_3 等等。

这是我目前所做的:

def f(row):
    if row['A'] > 0 :
        val = "Step_1"
    else:
        val = "Step_0"
    return val
df['B'] = df.apply(f, axis=1)

但我不明白,如何有条件地增加新列 B 中值的计数。 请注意 Step_1 可以替换为“1” - 它不需要是文本,以使解决方案更容易。

一个选项是创建一些全局变量来跟踪值和步长,以及 reference/update 那些在您使用 pandas.Series.apply 的函数中,如下所示:

import pandas as pd

df = pd.DataFrame(dict(
    A = [0,0,0,44.67,44.67,0,0,35.49,35.49,35.49,0]
))

step = 0
value = None

def get_step(x):
    global step
    global value
    if x != value:
        value = x
        step += 1
    return f'Step_{step}'

df['B'] = df['A'].apply(get_step)
print(df)

输出:

        A       B
0    0.00  Step_1
1    0.00  Step_1
2    0.00  Step_1
3   44.67  Step_2
4   44.67  Step_2
5    0.00  Step_3
6    0.00  Step_3
7   35.49  Step_4
8   35.49  Step_4
9   35.49  Step_4
10   0.00  Step_5

Example code in python tutor