【发布时间】:2021-05-03 14:24:28
【问题描述】:
我正在处理时间序列数据,数据帧示例如下。
输入数据:
| date || Device_Id | | value |
| ---------------- || --------- | | ----- |
| 28-12-2018 00:00 || d1 | | 0.014 |
| 28-12-2018 00:15 || d1 | | 0.012 |
| 28-12-2018 00:30 || d1 | | 0.012 |
| 28-12-2018 00:45 || d1 | | 0.014 |
| 28-12-2018 01:00 || d1 | | 0.012 |
| 28-12-2018 01:15 || d1 | | 0.012 |
| 28-12-2018 01:30 || d1 | | 0.012 |
| 28-12-2018 01:45 || d1 | | 0.012 |
| 28-12-2018 02:00 || d1 | | 0.014 |
| 28-12-2018 02:15 || d1 | | 0.012 |
| .... || d1 | | ... |
| . || . | | . |
| . || . | | . |
| 31-03-2019 23:45 || d2 | | . |
预期输出:
| date || Device_Id | | value |
| ---------------- || --------- | | ----- |
| 28-12-2018 00:00 || d1 | | 0.014 |
| 28-12-2018 00:15 || d1 | | 0.012 |
| 28-12-2018 00:30 || d1 | | 0.012 |
| 28-12-2018 00:45 || d1 | | 0.014 |
| 28-12-2018 01:00 || d1 | | 0 |
| 28-12-2018 01:15 || d1 | | 0 |
| 28-12-2018 01:30 || d1 | | 0 |
| 28-12-2018 01:45 || d1 | | 0 |
| 28-12-2018 02:00 || d1 | | 0 |
| 28-12-2018 02:15 || d1 | | 0 |
| .... || d1 | | ... |
| . || . | | . |
| . || . | | . |
| 31-03-2019 23:45 || d2 | | . |
我想根据凌晨 1 点到 6 点之间的 Device_Id、日期和时间替换原始数据框中的零值。我试图以不同的方式解决问题,但无法获得预期的结果。以下是我尝试过的代码。
data1['value']=data1.loc[(data1['Device_Id'].str.contains('d1') & data1['date'].str.contains('28-12-2018')), 'value'].between_time('01:00:00', '06:00:00') = 0
上面的代码显示错误“无法分配给函数调用”。之后,我尝试了以下。
data1['value']=data1.loc[(data1['Device_Id'].str.contains('d1') & data1['date'].str.contains('28-12-2018')), 'value'].between_time('01:00:00', '06:00:00') * 0
这可行,但不会更新原始数据框。
【问题讨论】:
-
要使其在同一个数据帧上工作,您可以尝试使用 inplace=True