熊猫列变为`True`时,我们从其他列中选择两个值,当`False`时选择相同的两个值

2024-09-19 20:36:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧如下所示:

 time                    mid price  dse_high_born
18  2019-04-22 00:05:15 0.001854    False
19  2019-04-22 00:05:30 0.001854    False
20  2019-04-22 00:05:45 0.001854    False
21  2019-04-22 00:06:00 0.001854    False
22  2019-04-22 00:06:15 0.001854    True
23  2019-04-22 00:06:30 0.001854    True
24  2019-04-22 00:06:45 0.001854    True
25  2019-04-22 00:07:00 0.001856    True
26  2019-04-22 00:07:15 0.001856    True
27  2019-04-22 00:07:30 0.001856    True
28  2019-04-22 00:07:45 0.001856    True
29  2019-04-22 00:08:00 0.001856    False
30  2019-04-22 00:08:15 0.001856    False

所以基本上我需要的是遍历dse_high_born列,当该列变成True时,在同一行选择另外两列中的值Timemid price,并将它们添加到同一索引处的新列Time1Price1

之后,当列dse_high_born变为False时,在同一行上选择相同的两个值(time,mid price),并将它们添加到两个新列Time2Price2的同一索引中

我试图迭代并使用函数continue,但它根本不起作用。。。我有点卡住了!你知道吗?提前谢谢

我需要的结果是这样的:

    time                    mid price  dse_high_born  Time1   price1  Time2 Price2
  2019-04-22 00:05:15 0.001854    False
  2019-04-22 00:05:30 0.001854    False
  2019-04-22 00:05:45 0.001854    False
  2019-04-22 00:06:00 0.001854    False
  2019-04-22 00:06:15 0.001854    True        2019-04-22 00:06:15 0.001854 
  2019-04-22 00:06:30 0.001854    True
  2019-04-22 00:06:45 0.001854    True
  2019-04-22 00:07:00 0.001856    True
  2019-04-22 00:07:15 0.001856    True
  2019-04-22 00:07:30 0.001856    True
  2019-04-22 00:07:45 0.001856    True                           2019-04-22 00:07:45 0.001856 
  2019-04-22 00:08:00 0.001856    False
  2019-04-22 00:08:15 0.001856    False

Tags: 数据falsetruetimeprice行上highmid
1条回答
网友
1楼 · 发布于 2024-09-19 20:36:42

要检测值更改,请使用shift()

changes = df['dse_high_born'].ne(df['dse_high_born'].shift()

然后:

changes_at_true = changes & df['dse_high_born']
changes_at_false = changes & ~df['dse_high_born']

给出在True值处发生的更改。所以你可以:

df.loc[changes_at_true, ['Time', 'mid_price']] += df.loc[changes_at_true, ['Time1', 'Price1']]

编辑:如果要将值复制到新列中,请执行以下操作:

df['Time1'] = ''
df['Price1'] = ''

df.loc[changes_at_true, ['Time1', 'Price1']] = df.loc[changes_at_true, ['Time', 'mid_price']]

相关问题 更多 >