我有一个场景,我想通过将另一个较小的表合并到数据框的每一行中来扩展数据框。
换句话说,如果大表有10行,小表有2行,则结果将是长度为20的表,其中原始表中的每一行都被复制,并合并了小表的新列。
为了实现这一点,我编写了一个小函数,它在每个表上添加一个共同的列,根据该列进行合并,然后删除该列。
这样做可以完成任务,但我认为它有些笨拙,可能不是最有效的解决方案,因为它需要执行多个DataFrame操作。处理这个问题最有效的方法是什么?
换句话说,如果大表有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操作。处理这个问题最有效的方法是什么?