在 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
我想要一个 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