【问题标题】:Merging two dataframes in Pandas/Python keeping all columns from dataframe 1在 Pandas/Python 中合并两个数据框,保留数据框 1 中的所有列
【发布时间】:2021-04-11 17:28:11
【问题描述】:

数据框 1 是一个空数据框,用于设置列的“标题”:

Header Green Header Yellow Header Red

数据框 2 包含实际行,但某些列可能与数据框 1 不同。

Header Green Header Yellow Header Purple
Data Green Data Yellow Data Purple

在生成的数据框中,我想将两个数据框堆叠在一起,但只保留 dataframe1 中的列(即绿色、黄色、红色)。最终的数据框应该是:

Header Green Header Yellow Header Red
Data Green Data Yellow Blank

明确一点,决赛桌:

1 保留数据框 1 中的所有列

2 添加数据框 2 中的数据,其中列与数据框 1 相同

3 删除数据帧 2 中不在最终数据帧中的数据帧 1 中的任何列。

不幸的是,数据框中有很多列,因此解决方案需要了解要保留哪些列,而不是数据框中现有的名称。

谢谢!

【问题讨论】:

  • 您不需要数据框 1 中的任何数据吗?如果是这种情况,只需列出数据框 2 中位于数据框 1 中的列:cols_to_keep = [col for col in df2.columns if col in df1.columns],然后使用该列列表从数据框 2 中进行选择:df_new = df1[cols_to_keep]
  • 谢谢,设法做到这一点,但这意味着 df_new 不会保存 df1 中的所有列,其中列不在 df2 中的空值。所以在上面,使用这个解决方案我不会在结果数据框中得到 Header Red?
  • 啊,明白了。错过了您需要具有空值的列的事实。

标签: python pandas dataframe


【解决方案1】:

除非数据集很大,否则我觉得这样可以解决您的问题:

只需在之后进行连接和切片

pd.concat([df,df2])[df.columns]

【讨论】:

    【解决方案2】:

    我认为这里使用df.reindex 的答案实际上完全符合您的要求:https://stackoverflow.com/a/43995812/9357244

    df_new = df2.reindex(columns = df.columns)
    

    如果它们是df 中的列,将保留df2 中的列。任何缺失的列都将被实例化为空值。

    【讨论】:

    • 非常感谢,这绝对成功了。举个例子,下面的代码做我想要的: import pandas as pd df1=pd.DataFrame(columns=["a","b","c"]) data={"a":[1,2 ],"b":[3,4],"d":[5,7]} df2=pd.DataFrame(data) df_new = df2.reindex(columns = df1.columns) print(df_new)
    猜你喜欢
    • 2021-09-14
    • 2017-01-09
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2017-12-24
    • 2017-12-16
    相关资源
    最近更新 更多