我对pandas python相对较新,目前正致力于数据帧。我们假设我有两个具有不同列标题和大小的数据帧。 ( df1 和 df2 )我想将它们连接成一个新的数据帧,同时将数据帧标题转换为新的行,如组合数据帧中所示。另外,我想将初始列标题名称转换为索引。
list1 = [('A', ['1','2', '3']),
('B', ['4', '5','6']),
('C', ['7','8','9'])]
df1 = pd.DataFrame.from_items(list1)
list2 = [('W', ['W1','W2', 'W3']),
('X', ['X1','X2', 'X3']),
('Y', ['Y1', 'Y2','Y3']),
('Z', ['Z1','Z2','Z3'])]
df2 = pd.DataFrame.from_items(list2)
在新数据框中 df1 之后附加了 df2 标题名称的所需组合数据框输出:
我尝试在下面的代码中使用concatenate和merge,但是在指定公共列时无法获得所需的格式。
df_combined = pd.concat([df1,df2], axis = 0)
我尝试从stackoverflow中的先前答案中寻找可能的解决方案,但没有类似的解决方案。有什么见解吗?真的很感激。
答案 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