如何将2个具有不同长度的标题的收件箱连接起来?我想将第二个收件箱的标题添加为一行.

以下是我的df1:

df1 = pd.DataFrame({'A': [1, 2], 'B': [2, 3], 'C': [3, 4]})

df1

   A  B  C
0  1  2  3
1  2  3  4

df2:

df2 = pd.DataFrame({'D': [34, 'e'], 'E': ['rt', 'rt']})

df2

    D   E
0  34  rt
1   e  rt

我的预期输出:

df = pd.DataFrame({'A': [1, 2,'D',34,'e'], 'B': [2, 3,'E','rt','rt'], 
                   'C': [3, 4,'','','']})

df

    A   B  C
0   1   2  3
1   2   3  4
2   D   E   
3  34  rt   
4   e  rt   

到目前为止,我的try 未能达到预期的结果:

(一)

df = pd.concat([df1, df2], axis = 0/1)

(二)

df1_header = pd.DataFrame([df2.columns], columns=df1.columns)
df2.columns = df1.columns 
result = pd.concat([df1_header, df1, df2], ignore_index=True)

推荐答案

这里有一种方法:

df = (
    pd.concat(
        [
            df1,
            df2.T.reset_index().T.rename(
                columns={k: v for k, v in iter(enumerate(df1.columns))}
                )
        ],
        axis=0,
        ignore_index=True
    )
)

Output

    A   B  C
0   1   2  3
1   2   3  4
2   D   E   
3  34  rt   
4   e  rt   

Explanation

  • df2的列名移至第一行,其中包含df.Tdf.reset_indexdf.T.重置后,df2的列名现在将由[0, 1]而不是['D', 'E'].
  • 接下来,我们可以使用dict理解来映射来自df1的列名,并通过df1.columnsenumerated版本将迭代器(iter)传递到df.rename.
  • 最后,在axis=0上使用pd.concat并忽略索引.
  • 您的输出包含空字符串而不是NaN个值.如果您坚持这一点,请添加df.fillna('').

Python相关问答推荐

使用GEKKO在简单DTE系统中进行一致初始化

通过仅导入pandas来在for循环中进行多情节

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

如何通过多2多字段过滤查询集

如何从FDaGrid实例中删除某些函数?

如何在Python中使用io.BytesIO写入现有缓冲区?

时间序列分解

从numpy数组和参数创建收件箱

更改键盘按钮进入'

如何使用数组的最小条目拆分数组

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

如何获取numpy数组的特定索引值?

numpy卷积与有效

名为__main__. py的Python模块在导入时不运行'

让函数调用方程

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

Flask运行时无法在Python中打印到控制台

如何从比较函数生成ngroup?

设置索引值每隔17行左右更改的索引

如果列包含空值,则PANAS查询不起作用