我有两个数据帧df1和df2,我需要使用df2中的密钥过滤掉df1,使用df2的开始和结束日期,我需要得到像df3这样的



我想使用df2中的关键字过滤数据,并为开始和结束日期添加额外的过滤器,然后需要使用此标准过滤df1以获得df3(示例输出(

import pandas as pd
data1 = { 'KEY':  ['1747604', '1747604','2113901', '1747604','2113901', '2113901'],
'date': ['2019-02-11', '2019-06-14', '2019-03-24', '2019-08-06', '2019-04-28' ,'2019-10-24'],
'sales': [342, 234, 67, 564, 564 ,45]
}
df1 = pd.DataFrame(data1, columns = ['KEY', 'date','sales'])
data2 = { 'KEY':  ['1747604', '2113901'],
'strdate': ['2019-02-11', '2019-03-24'],
'enddate': ['2019-07-06', '2019-09-26']
}
df2 = pd.DataFrame(data2, columns = ['KEY', 'strdate','enddate'])

我需要一个如下df3的输出-使用某种iter行或lambda,很抱歉我在任何地方都找不到答案

df3
KEY date    sales
0   1747604 2019-02-11  342
1   1747604 2019-06-14  234
2   2113901 2019-03-24  67
3   2113901 2019-04-28  564

您需要首先合并df1df2,然后过滤date不在strdateenddate之间的行。

df3 = df1.merge(df2)
df3 = (df3[df3['date'].between(df3.strdate, df3.enddate)]
.drop(columns = ['strdate', 'enddate']))

输出:

>>> df3
KEY        date  sales
0  1747604  2019-02-11    342
1  1747604  2019-06-14    234
3  2113901  2019-03-24     67
4  2113901  2019-04-28    564
  1. 合并两个数据帧。这就去掉了KEY不在df2中的所有行

df3 = df1.merge(df2, left_on='KEY', right_on='KEY')

  1. 筛选出date不在strdateenddate之间的所有行

df3 = df3[(df3.date >= df3.strdate) & (df3.date <= df3.enddate)]

  1. 删除仅用于筛选的不必要列

df3 = df3.drop(["strdate", "enddate"], axis=1)

相关内容

最新更新