【问题标题】:Filling dataframe based on index and column from another dataframe根据来自另一个数据帧的索引和列填充数据帧
【发布时间】:2026-02-04 00:25:02
【问题描述】:

我想知道是否可以用预定的索引填充一个空的数据帧,用另一个数据帧填充列?这里我有 2 个数据框 df1 和 df2,我想用 df1 的值填充 df2,但保持 df2 的形状。列的顺序也不相同。

values1 = pd.Series(['P1','P2','P3','P4','P5'])
values2 = pd.Series([30,40,50,70,80])
values3 = pd.Series([10,20,30,40,50])
df1 = pd.DataFrame({'A':values1,'C':values2,'B':values3})
df1 = df1.set_index(['A'])

df2 = pd.DataFrame(columns = ['A','B','C','D'])
df2_a_val = pd.Series(['P1','P2','P3','P4','P5','P6','P7','P8'])
df2['A'] = df2_a_val
df2 = df2.set_index(['A'])

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    这是您可以使用merge 的一种方法:

    df2 = (df2
          .merge(df1, left_index=True, right_index=True, how='left', suffixes=('','_'))
          .drop(['B','C'], 1)
          .rename(columns={'C_': 'C', 'B_': 'D'}))
    
          D     C     D
    A                  
    P1  NaN  30.0  10.0
    P2  NaN  40.0  20.0
    P3  NaN  50.0  30.0
    P4  NaN  70.0  40.0
    P5  NaN  80.0  50.0
    P6  NaN   NaN   NaN
    P7  NaN   NaN   NaN
    P8  NaN   NaN   NaN
    

    【讨论】:

    • 嘿,我实际上做了一个编辑,如果两个数据帧之间的列数发生变化,这个会改变吗?
    • 嘿,澄清一下,当你添加后缀时,你注意到两个表的哪一列是正确的?如果它没有后缀,则该列仅存在于主表中,在本例中为 df2。由于 df2 具有 NaN 值,我们将从 df1 中获取值,这些值将用“_”后缀表示。
    • 是的,没错,后缀被添加到两个表中通用的列中。这是预期的输出吗?