如何根据某些条件编辑数据框?
how to edit dataframe based on some condition?
我绘制了两个数据框,类似于 this。我想得到一个新的数据框,这样每当这两条曲线相互交叉时,只需在这些地方放置 1 或 -1。当蓝色曲线与橙色曲线向上交叉并与 -1 相反时,正号可能是这样的。
使用此代码生成的数据框(供参考):
df=pd.DataFrame()
df['curve1'] = pd.DataFrame(np.sin([a/(2*np.pi) for a in range(180)])*np.random.choice([1,.8,1.2],180, p=(.5,.25,.25)), columns=["data"])
df['curve2'] = pd.DataFrame(np.sin([-a/(2*np.pi) for a in range(180)])*np.random.choice([1,.8,1.2],180, p=(.5,.25,.25)), columns=["data"])
首先我计算这些曲线之间的差距-
df['curve_diff'] = df['curve1']-df['curve2']
接下来,我使用下面的命令。
df.loc[df['curve_diff'] > 0 & df['curve_diff'].shift(1) == 0, 'new'] = 1.0
df.loc[df['curve_diff'] < 0 & df['curve_diff'].shift(1) == 0, 'new'] = -1.0
df.loc[df['new'] != 1.0 | df['new'] != -1.0, 'new'] = 0
这些命令不起作用并出现此错误:
TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较。
每个条件使用括号 &
和 |
。像这样
df.loc[(df['new'] != 1.0) | (df['new'] != -1.0), 'new'] = 0
我绘制了两个数据框,类似于 this。我想得到一个新的数据框,这样每当这两条曲线相互交叉时,只需在这些地方放置 1 或 -1。当蓝色曲线与橙色曲线向上交叉并与 -1 相反时,正号可能是这样的。
使用此代码生成的数据框(供参考):
df=pd.DataFrame()
df['curve1'] = pd.DataFrame(np.sin([a/(2*np.pi) for a in range(180)])*np.random.choice([1,.8,1.2],180, p=(.5,.25,.25)), columns=["data"])
df['curve2'] = pd.DataFrame(np.sin([-a/(2*np.pi) for a in range(180)])*np.random.choice([1,.8,1.2],180, p=(.5,.25,.25)), columns=["data"])
首先我计算这些曲线之间的差距-
df['curve_diff'] = df['curve1']-df['curve2']
接下来,我使用下面的命令。
df.loc[df['curve_diff'] > 0 & df['curve_diff'].shift(1) == 0, 'new'] = 1.0
df.loc[df['curve_diff'] < 0 & df['curve_diff'].shift(1) == 0, 'new'] = -1.0
df.loc[df['new'] != 1.0 | df['new'] != -1.0, 'new'] = 0
这些命令不起作用并出现此错误:
TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较。
每个条件使用括号 &
和 |
。像这样
df.loc[(df['new'] != 1.0) | (df['new'] != -1.0), 'new'] = 0