我有两个要合并的数据框,其中一个有产品销售量
product quantity client date door
0 81007104 30 0 2014-01-05 40
1 81007104 41 1 2014-07-05 44
还有我要销售的合同中的另一个数据框,所以
product client door valid_from valid_until contract_num
0 81007104 71 6 2013-02-01 2014-02-01 25470
1 81007104 71 6 2014-05-01 2014-11-01 25944
所以我想使用产品,客户,门和日期之间在有效期至有效期之间的范围内的两个数据框进行合并。
我认为没有约会的日期
pd.merge(df1, df2, how='left', on=['product','client','door'])
但是由于我希望日期介于有效日期和有效日期之间,因此之前的合并无效。
通过上一次合并,我得到了
product quantity date client door valid from valid until
0 81007104 44.0 2014-03-05 71 6 2013-02-01 2014-02-01
1 81007104 44.0 2014-03-05 71 6 2014-05-01 2014-11-01
2 81007104 44.0 2014-03-05 71 6 2014-11-02 2015-07-20
但是日期不在valid_from和valid_until之间,因为我想要的日期应该在valid_from和valid_until范围内
product quantity date client door valid from valid until
0 81007104 44.0 2014-01-05 71 6 2013-02-01 2014-02-01
1 81007104 44.0 2014-07-02 71 6 2014-05-01 2014-11-01
2 81007104 44.0 2015-06-01 71 6 2014-11-02 2015-07-20
答案 0 :(得分:2)
我建议您将日期转换为pd.datetime,如下所示:
#create data
df1 = pd.DataFrame(data = {'product': ['81007104','81007104'],
'quantity': ['30','41'],
'client': ['0','1'],
'date': ['20140105','20140705'],
'door': ['40','44']})
df2 = pd.DataFrame(data = {'product': ['81007104','81007104'],
'client': ['0','1'],
'valid from': ['20140105','20140705'],
'valid until': ['20140105','20140705'],
'door': ['6','6'],
'contact num': ['25470','25944']})
# convert to datetime
df1.date = pd.to_datetime(df1.date, format='%Y%m%d', errors='ignore')
df2['valid from'] = pd.to_datetime(df2['valid from'], format='%Y%m%d', errors='ignore')
df2['valid until'] = pd.to_datetime(df2['valid until'], format='%Y%m%d', errors='ignore')
然后合并表以找到所需的常用功能(也许是内部联接是您要寻找的,而不是剩下的。从您的描述中我无法理解),然后可以根据日期过滤数据框,这在转换后很容易到pd.datetime。