【发布时间】:2019-12-29 06:08:10
【问题描述】:
我有一个场景,我想通过将另一个较小的表合并到数据帧的每一行来扩展数据帧。
换句话说,如果大表是 10 行,小表是 2 行,那么结果将是一个长度为 20 的表,其中原始表中的每一行都是重复的,而小表中的新列被合并了。
为了实现这一点,我编写了一个小函数,在每个表中添加一个公共列,在该列上合并,然后删除该列。
def merge_expand(big, small):
placeholder = "__placeholderstring__"
big.insert(0, placeholder, 1)
small.insert(0, placeholder, 1)
merged = big.merge(small, how='left', on=placeholder)
merged.drop(columns=placeholder, inplace=True)
return merged
# example
big = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
small = pd.DataFrame({'id': ['aa','bb'], 'val':['a','b']})
merge_expand(big, small)
# output:
a b id val
0 1 4 aa a
1 1 4 bb b
2 2 5 aa a
3 2 5 bb b
4 3 6 aa a
5 3 6 bb b
这可以完成这项工作,但在我看来它很老套,可能不是最有效的解决方案,因为它需要执行多个 DataFrame 操作。处理这个问题的最有效方法是什么?
【问题讨论】:
标签: python python-3.x pandas dataframe merge