Python Pandas列变为'True',我们从其他列中选择两个值,当'False'选择相同的两个值时

Python Pandas列变为'True',我们从其他列中选择两个值,当'False'选择相同的两个值时,python,pandas,Python,Pandas,我的数据框如下所示: 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:

我的数据框如下所示:

 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
所以基本上我需要的是在列变为True时遍历列dse_high_born,在同一行从其他两列中选择value Time和mid price,并将它们添加到同一索引的新列Time1和Price1中

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

我试图迭代并使用函数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

要检测值更改,请使用shift:

然后:

changes_at_true = changes & df['dse_high_born']
changes_at_false = changes & ~df['dse_high_born']
给出以真值发生的更改。因此,您可以:

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']]

我刚刚添加了一个我正在努力实现的示例,它用Nan更新了专栏中的两个。。。另外,如果您只看到我上面的示例,当列dse_high_born返回False时,它还应该更新列time1和price1!Thanks@Viktor.w不改变任何你认为合适的。您应该能够通过定义changes_at_false来完成其他两列,类似于changes_at_true。是的,它现在确实更新了,但我的时间现在变成了一个超长的数字,如“1555891575000000000”。您知道为什么吗?将“Time1”和“Time2”的默认值更改为“pd.NaT”。
df['Time1'] = ''
df['Price1'] = ''

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