我想使用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
您需要首先合并df1
和df2
,然后过滤date
不在strdate
和enddate
之间的行。
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
- 合并两个数据帧。这就去掉了
KEY
不在df2
中的所有行
df3 = df1.merge(df2, left_on='KEY', right_on='KEY')
- 筛选出
date
不在strdate
和enddate
之间的所有行
df3 = df3[(df3.date >= df3.strdate) & (df3.date <= df3.enddate)]
- 删除仅用于筛选的不必要列
df3 = df3.drop(["strdate", "enddate"], axis=1)