将数据框添加到特定行和列的现有数据框

问题描述

我有一个循环,每次创建一个具有形式的dataframe(DF)

DF

  ID        LCAR        RCAR  ...     LPCA1     LPCA2     RPCA2
0 d0129  312.255859  397.216797  ...  1.098888  1.101905  1.152332

,然后使用以下格式将该数据框添加到现有数据框(main_exl_df):

main_exl_df

         ID  Date     ... COGOTH3  COGOTH3X COGOTH3F
0     d0129   NaN    ...     NaN       NaN      NaN
1     d0757   NaN    ...     0.0       NaN      NaN
2     d2430   NaN    ...     NaN       NaN      NaN
3     d3132   NaN    ...     0.0       NaN      NaN
4     d0371   NaN    ...     0.0       NaN      NaN
                 ...   ...       ...  ...     ...       ...      ...
2163  d0620   NaN    ...     0.0       NaN      NaN
2164  d2410   NaN    ...     0.0       NaN      NaN
2165  d0752   NaN    ...     NaN       NaN      NaN
2166  d0407   NaN    ...     0.0       NaN      NaN

每次迭代时都会保存main_exl_df,然后再次加载以进行下一次迭代。

我尝试过

main_exl_df = pd.concat([main_exl_df,DF],axis=1)

但是这每次都将列添加到main_exl_df的右侧,并且如果ID为'ID'行则无法识别索引。

如何指定要在具有正确ID和右列的行上添加新的dataframe(DF)?

解决方法

在这种情况下,合并是合并列的一种方法。使用pd.merge时,需要指定合并是内部,左侧还是右侧。假设在这种情况下,您要将所有行保留在main_exl_df中,则应使用以下命令进行合并:

main_exl_df = main_exl_df.merge(DF,how='left',on='ID')

如果要保留两个数据框中的行,请使用outer作为参数值:

main_exl_df = main_exl_df.merge(DF,how='outer',on='ID')
,

这是最后解决问题的方法(借助this answer):

我使用了合并功能,但是使用_x和_y后缀合并了创建的重复列。为了摆脱_x后缀,我使用了以下功能:

    def drop_x(df):
        # list comprehension of the cols that end with '_x'
        to_drop = [x for x in df if x.endswith('_x')]
        df.drop(to_drop,axis=1,inplace=True)

,然后合并两个数据帧,同时用空字符串替换_y后缀:

    col_to_use = DF.columns.drop_duplicates(main_exl_df)
    main_exl_df = main_exl_df.merge(DF[col_to_use],on='ID',suffixes=('_x',''))
    drop_x(main_exl_df)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...