Python 3.x 在pandas中生成新列-有条件地增加整数计数
我想要一个熊猫数据框,如下所示: 列A-根据这些值,我想生成一个新变量-列B 始终,当值发生变化时,应进行“步骤(新编号)”。因此,第一个零值是步骤1,然后下一个值应该是步骤2,然后其他带数字的行应该是步骤3,依此类推 这就是我到目前为止所做的:Python 3.x 在pandas中生成新列-有条件地增加整数计数,python-3.x,pandas,conditional-statements,calculated-columns,Python 3.x,Pandas,Conditional Statements,Calculated Columns,我想要一个熊猫数据框,如下所示: 列A-根据这些值,我想生成一个新变量-列B 始终,当值发生变化时,应进行“步骤(新编号)”。因此,第一个零值是步骤1,然后下一个值应该是步骤2,然后其他带数字的行应该是步骤3,依此类推 这就是我到目前为止所做的: def f(row): if row['A'] > 0 : val = "Step_1" else: val = "Step_0" return val df['B'] = df.appl
def f(row):
if row['A'] > 0 :
val = "Step_1"
else:
val = "Step_0"
return val
df['B'] = df.apply(f, axis=1)
但我不明白,如何有条件地增加新列B中的值的计数。
请注意,步骤1可以替换为“1”-为了使解决方案更简单,它不需要是文本。一个选项是创建一些全局变量来跟踪值和步骤,并引用/更新与
pandas.Series一起使用的函数中的值和步骤。请这样应用:
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
你好,Phillyclause89,非常感谢。这是一个简化的例子。真正的CSV文件由4000行组成,行数始终不同。请给我一个例子,如何从csv文件加载A列而不是列出值?您需要阅读/google关于如何使用的内容,这将为您提供所有csv数据的pandas.DataFrame
。一旦你有了df
,你就应该能够使用我在回答中的逻辑,无论你想要什么列。在没有实际访问文件的情况下,很难给出加载csv文件的具体代码示例。