我无法将DataFrame数组合并到单个DataFrame中,并在特定列上合并。
我有一个名为data
的DataFrame列表,每个元素data[i]
如下所示:
Rank Name
2400 1 name1
2401 2 name2
2402 3 name3
2403 4 name4
2404 5 name5
每个DataFrame包含给定月份的前5个列表,该列表包含一年的月度结果。
我希望最终的合并DataFrame看起来像这样:
Rank Name_month1 Name_month2 Name_month3 ...
2400 1 name1 name1 name1 ...
2401 2 name2 name2 name2 ...
2402 3 name3 name3 name3 ...
2403 4 name4 name4 name4 ...
2404 5 name5 name5 name5 ...
其中每一列在第一列之后对应于每月排名。
合并列表中的2个DataFrame data
:
pandas.merge(data[0], data[1], on='Rank', suffix=['_month1', '_month2'])
但是当我尝试使用filter()
或链.merge
时,我一直遇到麻烦。
有什么想法?谢谢!
答案 0 :(得分:6)
问题在于,当您进行第一次合并时,您更改了列的名称(添加后缀),并且在第二次合并时不会发生名称冲突,因此第二次合并中的后缀将是永远不会被使用。解决方案是在合并后手动重命名列。
In [2]: df
Out[2]: Rank Name
2400 1 name1
2401 2 name2
2402 3 name3
2403 4 name4
2404 5 name5
In [3]: df.merge(
df, on='Rank', suffixes=['_month1', '_month2']
).merge(df, on='Rank').rename(
columns={'Name': 'Name_month3'}
).merge(df, on='Rank').rename(
columns={'Name': 'Name_month4'}
)
Out[3]: Rank Name_month1 Name_month2 Name_month3 Name_month4
0 1 name1 name1 name1 name1
1 2 name2 name2 name2 name2
2 3 name3 name3 name3 name3
3 4 name4 name4 name4 name4
4 5 name5 name5 name5 name5
如果您有一个DataFrame列表,请执行以下操作:
In [4]: data = [df, df, df, df]
current = data[0].rename(columns={'Name': 'Name_month1'})
for i, frame in enumerate(data[1:], 2):
current = current.merge(frame, on='Rank').rename(
columns={'Name': 'Name_month%d' % i})
current
Out[4]: Rank Name_month1 Name_month2 Name_month3 Name_month4
0 1 name1 name1 name1 name1
1 2 name2 name2 name2 name2
2 3 name3 name3 name3 name3
3 4 name4 name4 name4 name4
4 5 name5 name5 name5 name5
答案 1 :(得分:0)
我创建了一个Gist,其中包含一个用于连接数据帧“列表”的函数。该列表实际上是一个字典,其中包含的键是在列名冲突的情况下使用的后缀:
加入pandas数据帧列表(dict)