我想要一个熊猫的数据框架,如下所示: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“替换-它不需要是文本,以使解决方案更容易。
发布于 2020-04-29 04:28:49
一种选择是创建一些全局变量来跟踪值和步骤,并引用/更新与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
https://stackoverflow.com/questions/61488860
复制相似问题