通过将第二个数据框直接放置在第一个数据框下方而不删除键,将两个数据框与可扩展列组合

问题描述 投票:0回答:2

这是我拥有的 2 个数据框:

数据框1:

Key1    Key2    Key3    Key4    Key5
Value1  Value2  Value3  Value4  Value5

数据框2:

Key1    Key2    Key3
Value1  Value2  Value3
Value4  Value5  Value6

预期结果:

Key1    Key2    Key3    Key4    Key5
Value1  Value2  Value3  Value4  Value5
Key1    Key2    Key3
Value1  Value2  Value3
Value4  Value5  Value6

如何在不合并键的情况下加入这两个数据框?

python pandas dataframe
2个回答
0
投票

示例代码

在您的示例中,我假设顶行是列。

import pandas as pd
data1 = {'Key1': ['Value1'], 'Key2': ['Value2'], 'Key3': ['Value3'], 
         'Key4': ['Value4'], 'Key5': ['Value5']}
data2 = {'Key1': ['Value1', 'Value4'], 
         'Key2': ['Value2', 'Value5'], 
         'Key3': ['Value3', 'Value6']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

代码

out = pd.concat([df1, df2.columns.to_frame().T, df2], ignore_index=True)

     Key1    Key2    Key3    Key4    Key5
0  Value1  Value2  Value3  Value4  Value5
1    Key1    Key2    Key3     NaN     NaN
2  Value1  Value2  Value3     NaN     NaN
3  Value4  Value5  Value6     NaN     NaN

0
投票

假设您的输入 DataFrame 具有 Key1/Key2/... 作为列标题,您可以首先将它们移动到行,然后

concat

为此,有两个选择:

dfs = [df1, df2]

out = pd.concat([d.T.reset_index().T for d in dfs], ignore_index=True)

或者:

dfs = [df1, df2]

out = pd.concat([pd.concat([pd.DataFrame([d.columns]),
                            pd.DataFrame(d.to_numpy())])
                 for d in dfs],
                ignore_index=True)

可重复输入:

df1 = pd.DataFrame({'Key1': ['Value1'], 'Key2': ['Value2'], 'Key3': ['Value3'],
                    'Key4': ['Value4'], 'Key5': ['Value5']})
df2 = pd.DataFrame({'Key1': ['Value1', 'Value4'],
                    'Key2': ['Value2', 'Value5'],
                    'Key3': ['Value3', 'Value6']})
© www.soinside.com 2019 - 2024. All rights reserved.