2

我已经datetime64[ns]使用以下代码行过滤了 pandas 数据框中的类型,以获取每个月特定日期的数据。

df[df['Date'].map(lambda x: x.day) == 1]

输出如下:

19.9    2013-07-01
34.8    2013-08-01
12.9    2013-10-01
12.6    2013-11-01

但是,如果您发现 for 的条目2013-09-01丢失,因为它在原始数据集中不可用。在这种情况下,我想获取2013-09-02. 理想情况下,如果某个日期在周末(周六和周日或任何缺失的日期,如假期或特定日期的数据不可用),我想获取下一个可用日期的数据。想知道我们是否可以使用 pandas 来实现,或者我需要手动迭代执行此功能。

4

2 回答 2

1

您也可以通过将日期设置为索引并使用index.get_loc()将下一个现有日期搜索到每个月的第一天并将方法设置为bfill来执行此操作:

print(df)
             Val
Date            
2013-07-01  19.9
2013-08-01  34.8
2013-08-02  34.8
2013-09-02  10.4
2013-10-01  12.9
2013-11-01  12.6

df = df.set_index('Date')
df.iloc[[df.index.get_loc(datetime.datetime(date[0],date[1],1),
                   method='bfill') for date,_ in df.groupby(
                   [df.index.year,df.index.month])]]

             Val
Date            
2013-07-01  19.9
2013-08-01  34.8
2013-09-02  10.4
2013-10-01  12.9
2013-11-01  12.6
于 2018-11-12T16:47:57.800 回答
1

我认为您需要DatetimeIndex使用asfreqmethod='bfill'回填缺失值:

df = df.set_index('Date').asfreq('d', method='bfill')

然后过滤DatetimeIndex.day

df1 = df[df.index.day == 1]

样品

print (df)
    Val       Date
0  19.9 2013-07-01
1  34.8 2013-08-01
2  10.4 2013-09-02
3  12.9 2013-10-01
4  12.6 2013-11-01

print (df.dtypes)
Val            float64
Date    datetime64[ns]

df = df.set_index('Date').asfreq('d', method='bfill')
df1 = df[df.index.day == 1]
print (df1)
             Val
Date            
2013-07-01  19.9
2013-08-01  34.8
2013-09-01  10.4
2013-10-01  12.9
2013-11-01  12.6
于 2018-11-12T16:04:29.847 回答