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