2016-06-11 48 views
1

separate question续,但相关code`:目前大熊猫列分配基础上,如果条件


我需要更改熊猫数据帧的一列,但我找到了解决办法需要大量的蛮力:由于它是一个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允许的平滑度。再次感谢所有的帮助!


有原始代码中的错误阿尔贝托·加西亚拉沃索有助于澄清,一个**SettingWithCopyWarning由于df.loc[idxHS:idxDil0].proc而不是df.loc[idxHS:idxDil0,'proc']。但是,这并不能减轻原文的意图:简化每次数据运行中每步所需的代码行数

回答

0

在行

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

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

把上面一行

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

作为警告消息显示。

+0

将这4条线压缩到1会产生更大的问题,并且使用单线功能可以更轻松,更清晰。 – double0darbo

+0

您的编辑使我的答案与您的问题似乎无关。我认为你应该回滚编辑并将其作为该问题的更新阅读。 –

+0

关于凝聚线:在重读你的问题(和顶部链接的问题)之后,我仍然不知道你想要做什么。你是说在某些情况下你有一种改变状态的东西吗? –