我收到一个CSV文件列表(从3个到20个不等),我需要在主键A
上进行内部合并,并获取所有剩余的列,并将它们放在一个合并的单个数据帧中.
由于我不能共享整个CSV文件,所以我举了一些例子:
from functools import reduce
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [2, 3, 4], 'C': [10, 11, 12], 'B': [4, 5, 6]})
df3 = pd.DataFrame({'A': [3], 'B': [0], 'D': [13]})
df4 = pd.DataFrame({'A': [3, 7], 'B': [9, 1], 'D': [1, 2]})
list_1 = [df1, df2, df3, df4]
list_2 = [df1, df2, df3]
merged_df = reduce(lambda left, right: pd.merge(left, right, on='A'), list_1)
如您所见,结果数据帧应该只有一行,因为3
是所有数据帧之间共享的唯一主键.但是,当我使用上面的代码时,3个数据帧没有错误,但4个数据帧有错误:
MergeError: Passing 'suffixes' which cause duplicate columns {'B_x'} is not allowed.个
以下是我的预期输出(1 ROW / 8 COLUMNS
):
我添加了合并标题和管道只是为了澄清
# | MERGE 1 | MERGE 2 | MERGE 3
A B_1 | C B_2 | B_3 D_1 | B_4 D_2
3 6 | 11 5 | 0 13 | 9 1
复制的列B and D
应该具有像计数器一样的递增后缀.
你们有什么办法解决这个问题吗?我觉得我们需要使用enumerate
Inside reduce
,但我真的不知道如何结合这一点.网站推荐了这merge multiple dataframe with specified suffix个,但我不认为它适合我的用法.