通过比较日期替换行值

时间:2018-01-18 07:46:25

标签: python pandas datetime dataframe

我在列表中有一个日期:

[datetime.date(2017, 8, 9)]

我想将与该日期匹配的数据帧的值替换为零。

数据帧:

          Date  Amplitude    Magnitude  Peaks  Crests
0   2017-06-21   6.953356  1046.656154      4       3
1   2017-06-27   7.015520  1185.221306      5       4
2   2017-06-28   6.947471   908.115055      2       2
3   2017-06-29   6.921587   938.175153      3       3
4   2017-07-02   6.906078   938.273547      3       2
5   2017-07-03   6.898809   955.718452      6       5
6   2017-07-04   6.876283   846.514852      5       5
7   2017-07-26   6.862897   870.610086      6       5
8   2017-07-27   6.846426   824.403786      7       7
9   2017-07-28   6.831949   813.753420      7       7
10  2017-07-29   6.823125   841.245427      4       3
11  2017-07-30   6.816301   846.603427      5       4
12  2017-07-31   6.810133   842.287006      5       4
13  2017-08-01   6.800645   794.167590      3       3
14  2017-08-02   6.793034   801.505774      4       3
15  2017-08-03   6.790814   860.497395      7       6
16  2017-08-04   6.785664   815.055002      4       4
17  2017-08-05   6.782069   829.607640      5       4
18  2017-08-06   6.778176   819.014799      4       3
19  2017-08-07   6.774587   817.624203      5       5
20  2017-08-08   6.771193   815.101641      4       3
21  2017-08-09   6.765695   772.970000      1       1
22  2017-08-10   6.769422   945.207554      1       1
23  2017-08-11   6.773154   952.422598      4       3
24  2017-08-12   6.770926   826.700122      4       4
25  2017-08-13   6.772816   916.046905      5       5
26  2017-08-14   6.771130   834.881662      5       5
27  2017-08-15   6.769183   826.009391      5       5
28  2017-08-16   6.767313   824.650882      5       4
29  2017-08-17   6.765894   832.752100      5       5
30  2017-08-18   6.766861   894.165751      5       5
31  2017-08-19   6.768392   912.200274      4       3

我试过这个:

for x in range(len(all_details)):
    for y in selected_day:
        m = all_details['Date'] > y
        all_details.loc[m, 'Peaks'] = 0

但是收到错误:

  

ValueError:数组的长度不同:32 vs 1

任何人都可以建议我使用正确的方法> 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您的解决方案可以很好地处理您的样本数据。

另一个更快的解决方案是在循环中创建每个蒙版,然后按逻辑orand减少 - 需要什么。更好的是解释here

L = [datetime.date(2017, 8, 9)]
m = np.logical_or.reduce([all_details['Date'] > x for x in L])
all_details.loc[m, 'Peaks'] = 0

在您的解决方案中,最好只按list的最小日期进行比较:

all_details.loc[all_details['Date'] > min(L), 'Peaks'] = 0