我正在尝试合并两个数据帧,在某些列上进行精确匹配,在另一些列(通常是日期)上进行as_of
匹配。这篇文章很好地描述了其意图(我将复制粘贴以下主要内容):
Pandas: Approximate join on one column, exact match on other columns
上面的帖子被回复了;只有它可以追溯到2016年推出pandas.merge_asof
之前。我相信现在有一个更简单的答案,因为它已经发布了。残酷的方法是将每组行合并为_of,这些行的值与我要合并的列的值相同。但是有更优雅的版本吗
所需输入和输出的精确描述:
投入
df1 = pd.DataFrame({'index': ['a1','a2','a3','a4'], 'col1': ['1232','432','432','123'], 'col2': ['asd','dsa12','dsa12','asd2'], 'col3': ['1','2','2','3'], 'date': ['2010-01-23','2016-05-20','2010-06-20','2008-10-21'],}).set_index('index')
df1
Out[430]:
col1 col2 col3 date
index
a1 1232 asd 1 2010-01-23
a2 432 dsa12 2 2016-05-20
a3 432 dsa12 2 2010-06-20
a4 123 asd2 3 2008-10-21
df2 = pd.DataFrame({'index': ['b1','b2','b3','b4'], 'col1': ['132','432','432','123'], 'col2': ['asd','dsa12','dsa12','sd2'], 'col3': ['1','2','2','3'], 'date': ['2010-01-23','2016-05-23','2010-06-10','2008-10-21'],}).set_index('index')
df2
Out[434]:
col1 col2 col3 date b_col
index
b1 132 asd 1 2010-01-23 1
b2 432 dsa12 2 2016-05-23 2
b3 432 dsa12 2 2010-06-10 3
b4 123 sd2 3 2008-10-21 4
产出:
col1 col2 col3 date b_col
index
a2 432 dsa12 2 2016-05-20 2
a3 432 dsa12 2 2010-06-20 3
注1:我需要这样做的原因是我需要像groupby(...)[...].rolling(...).transform(...)
这样的延迟,它似乎还不存在,除非我遗漏了什么
注2:我希望避免计算所有对,然后过滤,因为数据帧可能会变得太大
我试图更接近你的问题。然而,我没有尝试合并,而是合并。我希望这种方法能帮助您:
相关问题 更多 >
编程相关推荐