Pandas 熊猫通过从另一个数据框中查找列名和值来更新数据框

Pandas 熊猫通过从另一个数据框中查找列名和值来更新数据框,pandas,Pandas,我有一张excel表格,可以读入熊猫数据框。它看起来像: KEY_FIELD_NAME KEY_FIELD_VAL_ORIG KEY_FIELD_VAL_NEW NAME XXX YYY AGE 11 22 INCOME 100 200 NAME

我有一张excel表格,可以读入熊猫数据框。它看起来像:

KEY_FIELD_NAME  KEY_FIELD_VAL_ORIG     KEY_FIELD_VAL_NEW
 NAME              XXX                      YYY
 AGE               11                       22  
 INCOME            100                      200
 NAME               ABC                    DEF
我有另一个熊猫数据帧(df_orig),如下所示:

NAME AGE INCOME
XXX   11  100
ABC   25   300
如何更新df_orig,使其自动按键_字段_名称和键_字段_VAL_orig查找excel工作表,并更新为新值:

df_orig_需要:

NAME AGE INCOME
YYY  22   200
DEF   25   300
因此,您希望使用,但在使用它之前,您应该通过使用原始名称作为索引来重塑您的修改数据框,使其具有与原始
数据框相同的形状,以便我们以后可以加入:

df['NAME'] = pd.Series(np.where(df['KEY_FIELD_NAME'] == 'NAME', df['KEY_FIELD_VAL_ORIG'],np.nan)).ffill()
df_piv = df.pivot(index='NAME', columns='KEY_FIELD_NAME', values='KEY_FIELD_VAL_NEW')
print(df_piv)
#    KEY_FIELD_NAME  AGE INCOME NAME
#NAME                           
#ABC             NaN    NaN  DEF
#XXX              22    200  YYY
然后您可以在设置索引后立即调用update。它在原地工作,所以

df_orig.set_index('NAME', drop=False, inplace=True)
df_orig.update(df_piv)
print(df_orig.reset_index(drop=True))
#      NAME AGE INCOME
#0  YYY  22    200
#1  DEF  25    300
因此,您希望使用,但在使用它之前,您应该通过使用原始名称作为索引来重塑您的修改数据框,使其具有与原始
数据框相同的形状,以便我们以后可以加入:

df['NAME'] = pd.Series(np.where(df['KEY_FIELD_NAME'] == 'NAME', df['KEY_FIELD_VAL_ORIG'],np.nan)).ffill()
df_piv = df.pivot(index='NAME', columns='KEY_FIELD_NAME', values='KEY_FIELD_VAL_NEW')
print(df_piv)
#    KEY_FIELD_NAME  AGE INCOME NAME
#NAME                           
#ABC             NaN    NaN  DEF
#XXX              22    200  YYY
然后您可以在设置索引后立即调用update。它在原地工作,所以

df_orig.set_index('NAME', drop=False, inplace=True)
df_orig.update(df_piv)
print(df_orig.reset_index(drop=True))
#      NAME AGE INCOME
#0  YYY  22    200
#1  DEF  25    300

其他几排看起来怎么样?谢谢你,安迪。你是说在哪个数据帧中?df_orig?带有键字段的_NAME@AndyHayden:其余行具有重复的键字段名称,但键字段值和键字段值的值不同。您可以在另一组行中编辑吗?我认为这会极大地改变潜在的答案。其余的几行是什么样子的?谢谢你,安迪。你是说在哪个数据帧中?df_orig?带有键字段的_NAME@AndyHayden:其余行具有重复的键字段名称,但键字段值和键字段值的值不同。您可以在另一组行中编辑吗?我认为这会极大地改变潜在的答案。这纯粹是天才。谢谢,那真是天才。非常感谢。