我正在尝试根据日期字段过滤数据框。
Date Value
201810 100
201811 150
201812 95
201901 125
201902 150
201903 200
201904 225
过滤将动态进行。例如。首个日期和结束日期不应“硬编码”。 所以我的方法如下:
month = pd.DataFrame(set(df['Date']),columns=['Date'])
df['Date'] = pd.to_datetime(df['Date'],format='%Y%m)
在这里,我必须根据日期进行过滤并创建一个新的数据框。在最后一个日期,例如201903。
dt_first = month['Date'].head(1) <---first date is being dynamically created
dt_last = month.iloc[-2] <-- last date, dynamically created.
df_filter = df[(df.Date.ge(dt_first))&(df.Date.le(dt_last))]
但是最后一行正在生成空白数据帧。生成的数据框应该看起来像
Date Value
201810 100
201811 150
201812 95
201901 125
201902 150
201903 200
我知道我错过了一些东西。
有人可以根据条件建议如何有效过滤上述数据框吗?
答案 0 :(得分:0)
此处需要按标量进行比较,因此按Series.iat
提取列的第一个和最后一个值:
顺便说一句,如果用ge
比较具有等于或等于第一个val的排序值,则它匹配所有数据,因此此条件始终返回True,因此应使用相同的输出将其删除:
df['Date'] = pd.to_datetime(df['Date'],format='%Y%m')
df_filter = df[(df.Date.ge(df['Date'].iat[0]))&(df.Date.lt(df['Date'].iat[-1]))]
类似:
df_filter = df[(df.Date.lt(df['Date'].iat[-1]))]
print (df)
Date Value
0 2018-10-01 100
1 2018-11-01 150
2 2018-12-01 95
3 2019-01-01 125
4 2019-02-01 150
5 2019-03-01 200
6 2019-04-01 225