带条件的Pandas中基于数据帧的数据动态过滤

2024-04-19 22:58:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试根据日期字段筛选数据帧

 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

我知道我错过了一些东西

有人能建议如何根据条件有效过滤上述数据帧吗


Tags: 数据方法编码dfdatevaluedt动态
1条回答
网友
1楼 · 发布于 2024-04-19 22:58:10

这里需要通过标量进行比较,因此通过^{}提取列的第一个和最后一个值:

顺便说一句,如果按ge比较排序值中的较大值或相等值与第一个值,它将匹配所有数据,因此此条件始终返回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

相关问题 更多 >