[英]I have two data frames df1 and df2, I need to filter out df1 using keys in df2 using start and end dates in df2, I need to get a result like 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
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']))
Output:
>>> 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.