根据if条件在一行中显示pandas列分配

时间:2016-06-11 15:00:05

标签: python pandas

继续separate question,但相关的代码`:

我需要更改一个pandas数据框的列,但我找到的解决方案需要大量的暴力:由于必须为每个调用设置条件,它缺乏通用性,这要归功于它是timedelta索引和随机性收集的数据。由于我在数据收集期间需要为阶段分配几个条件,所以我希望有更清洁的选择。

以下是纲要:

我有几个步骤,需要给出边界。我希望他们各自在一行中完成。目前,我为启动和停止创建索引键,和/或处理时间增量,然后建立变量。

我希望所有7看起来像这样:

    df['proc'] = np.where((df['press']>1100),'gas soak','pressurize')

相反,他们首先调用索引键:

    idxPnotT = df[df.proc == 'gas soak'].index.tolist()
    idxHS = idxPnotT[0]
    idxDil0 = idxPnotT[0] + pd.Timedelta(minutes=1)

然后他们使用索引键进行分配。

    df.loc[idxHS:idxDil0].proc = 'gas soak'

代码不漂亮,缺乏python允许的平滑度。再次感谢您的帮助!

原始代码中有一个错误,Alberto Garcia-Raboso帮助澄清了**SettingWithCopyWarning归因于df.loc[idxHS:idxDil0].proc而不是df.loc[idxHS:idxDil0,'proc']。但是,这并没有减轻原始帖子的意图:简化每个数据运行中每步所需的代码行

1 个答案:

答案 0 :(得分:0)

在第

df.loc[idxHS:idxDil0].proc = 'gas soak'

您正尝试在数据框df.loc[idxHS:idxDil0]的切片df上设置值。问题是切片可能变成副本而不是df的视图。如果您在副本上设置值,则原始数据框保持不变 - 这就是警告的内容。

将该行更改为

df.loc[idxHS:idxDil0, 'proc'] = 'gas soak'

正如警告信息所示。