连接,合并或连接数据帧以获取新的数据帧

时间:2018-04-17 10:18:27

标签: python pandas dataframe merge concatenation

我对pandas python相对较新,目前正致力于数据帧。我们假设我有两个具有不同列标题和大小的数据帧。 ( df1 df2 )我想将它们连接成一个新的数据帧,同时将数据帧标题转换为新的行,如组合数据帧中所示。另外,我想将初始列标题名称转换为索引。

list1 = [('A', ['1','2', '3']),
    ('B', ['4', '5','6']),
    ('C', ['7','8','9'])]

df1 = pd.DataFrame.from_items(list1)

df1

list2 = [('W', ['W1','W2', 'W3']),
    ('X', ['X1','X2', 'X3']),
    ('Y', ['Y1', 'Y2','Y3']),
    ('Z', ['Z1','Z2','Z3'])]

df2 = pd.DataFrame.from_items(list2)

df2

在新数据框中 df1 之后附加了 df2 标题名称的所需组合数据框输出:

Correct dataframe

我尝试在下面的代码中使用concatenate和merge,但是在指定公共列时无法获得所需的格式。

df_combined = pd.concat([df1,df2], axis = 0)

Wrong df

我尝试从stackoverflow中的先前答案中寻找可能的解决方案,但没有类似的解决方案。有什么见解吗?真的很感激。

1 个答案:

答案 0 :(得分:1)

您可以通过range将列名称转换为默认值:

df1.columns = range(len(df1.columns))
df2.columns = range(len(df2.columns))
df_combined = pd.concat([df1,df2])

或者:

map1 = dict(zip(df1.columns, range(len(df1.columns))))
map2 = dict(zip(df2.columns, range(len(df2.columns))))

df_combined = pd.concat([df1.rename(columns=map1),
                         df2.columns.to_frame().T.rename(columns=map2),
                         df2.rename(columns=map2)], ignore_index=True)
print (df_combined)
    0   1   2    3
0   1   4   7  NaN
1   2   5   8  NaN
2   3   6   9  NaN
3   W   X   Y    Z
4  W1  X1  Y1   Z1
5  W2  X2  Y2   Z2
6  W3  X3  Y3   Z3