【发布时间】:2016-11-22 20:38:12
【问题描述】:
我正在尝试合并/加入多个Dataframes,但到目前为止我还没有运气。我找到了merge 方法,但它只适用于两个数据框。我还发现这个 SO answer 建议做这样的事情:
df1.merge(df2,on='name').merge(df3,on='name')
不幸的是,它不适用于我的情况,因为我有 20 多个数据帧。
我的下一个想法是使用join。根据加入多个数据框时的参考,我需要使用列表,并且只有我可以加入索引列。所以我更改了所有列的索引(好的,它可以在语法上轻松完成)并最终得到如下结果:
df.join([df1,df2,df3])
不幸的是,这种方法也失败了,因为其他列名称在所有数据框中都是相同的。我决定做最后一件事,那就是重命名所有列。但是当我最终加入一切时: df = pd.Dataframe() df.join([df1,df2,df3])
我收到了空数据框。我不知道如何加入他们。有人可以提出更多建议吗?
EDIT1:
示例输入:
import pandas as pd
df1 = pd.DataFrame(np.array([
['a', 5, 19],
['b', 14, 16],
['c', 4, 9]]),
columns=['name', 'attr1', 'attr2'])
df2 = pd.DataFrame(np.array([
['a', 15, 49],
['b', 4, 36],
['c', 14, 9]]),
columns=['name', 'attr1', 'attr2'])
df1
name attr1 attr2
0 a 5 19
1 b 14 16
2 c 4 9
df2
name attr1 attr2
0 a 15 49
1 b 4 36
2 c 14 9
预期输出:
df
name attr1_1 attr2_1 attr1_2 attr2_2
0 a 5 19 15 49
1 b 14 16 4 36
2 c 4 9 14 9
数据帧之间的索引可能是无序的,但可以保证它们会存在。
【问题讨论】:
-
如果所有 DataFrame 中的列名都相同,那么您希望输出的实际样子是什么?
-
@chrisaycock 我添加了示例输入和预期输出。我基于
merge,其中 pandas 自动为其他列的名称添加后缀