【问题标题】:Pandas Combine dataframes different indicesPandas 组合数据框不同的索引
【发布时间】:2017-05-26 13:52:22
【问题描述】:

我有两个数据框 df_1df_2 具有不同的索引和列。但是,有些索引和列重叠。

我用索引和列的联合创建了一个数据框df:因此没有重复的索引或列。

我想用以下方式填充数据框df

for x in df.index:
  for y in df.columns:
    df.loc[x,y] = df_1.loc[x,y] if (x,y) in (df_1.index,df_1.columns) else df_2.loc[x,y]

谁能告诉我一个有效的方法?

谢谢!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我觉得你需要DataFrame.combine_first:

    df_1 = pd.DataFrame({'A':[1,2,3],
                         'E':[4,5,6],
                         'V':[7,8,9],
                         'D':[1,3,5]}, 
                         index=pd.to_datetime(['2017-01-05', '2017-01-04', '2017-01-01']))
    
    print (df_1)
                A  D  E  V
    2017-01-05  1  1  4  7
    2017-01-04  2  3  5  8
    2017-01-01  3  5  6  9
    
    df_2 = pd.DataFrame({'A':[1,2,3],
                         'B':[4,5,6],
                         'C':[7,8,9]}, index=pd.date_range('2017-01-01', periods=3)) * 10
    
    print (df_2)
                 A   B   C
    2017-01-01  10  40  70
    2017-01-02  20  50  80
    2017-01-03  30  60  90
    
    df = df_1.combine_first(df_2)
    print (df)
                   A     B     C    D    E    V
    2017-01-01   3.0  40.0  70.0  5.0  6.0  9.0
    2017-01-02  20.0  50.0  80.0  NaN  NaN  NaN
    2017-01-03  30.0  60.0  90.0  NaN  NaN  NaN
    2017-01-04   2.0   NaN   NaN  3.0  5.0  8.0
    2017-01-05   1.0   NaN   NaN  1.0  4.0  7.0
    

    【讨论】:

    • 太棒了!索引和列是否自动排序?因为我的索引是日期索引。
    • 我认为是的,但不是 100% 肯定,所以如果没有添加 .sort_index()
    • 我测试了它,它很好地排序了 datetimeindex。我也用它改变了样本。
    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2015-04-30
    • 2018-08-21
    • 2017-10-17
    • 2018-06-07
    • 2020-01-28
    相关资源
    最近更新 更多