Pandas 熊猫通过从另一个数据框中查找列名和值来更新数据框
我有一张excel表格,可以读入熊猫数据框。它看起来像: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
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:其余行具有重复的键字段名称,但键字段值和键字段值的值不同。您可以在另一组行中编辑吗?我认为这会极大地改变潜在的答案。这纯粹是天才。谢谢,那真是天才。非常感谢。