繁体   English   中英

将 pandas 数据帧 (df1) 行值匹配到另一个数据帧 (df2) 列并更新数据帧 (Df1) 中不同列的行

[英]Match a pandas Data frame (df1) row value to another Data frame (df2) column and update a rows of different column in Data frame (Df1)

我有 2 个数据帧 1st (DF1) 如下所示。

    JID      JRSubUsageLabel_16 SUB_USAGE_16
22  6223    JR_BOne_CY16              NaN
26  6510    JR_S_CY16                 NaN
59  11932   JR_B_CY16                 NaN
70  14242   JR_B_CY16                NaN

第二个数据框(df2)看起来像这样

             JID    JR1_B_CY16  JR_CY16
1           1457    NaN             NaN
2           1530    NaN             NaN
3           1535    5               NaN
4           2035    NaN             NaN
5           6223    5               NaN
6           6510    1.0             6
39         11932    1.0             NaN
40         12021    NaN             NaN
41         12056    NaN             NaN
42         14234    2               1.0

我想根据“JID”列和 JR1SubUsageLabel_16 列值更新我的 DF1 数据框 JID 是两个数据框中的匹配列。 在 DF1“JR1SubUsageLabel_16”列值成为 DF2 列。 因此,DF2 其中一列也与 DF1 "JR1SubUsageLabel_16" 列值匹配。 它应该如下所示。

    JID      JRLabel_16           SUB_USAGE_16
22  6223    JR1_B_CY16            5
26  6510    JR1_S_CY16            6
59  11932   JR1_B_CY16            1
70  14242   JR1_B_CY16            2

我试图使用 lambda 来更新它,而映射无法确切地知道如何更新它。 谁能帮帮我??

提前致谢

一种方法是merge

s = df2.melt('JID',value_name='SUB_USAGE_16',var_name='JR1SubUsageLabel_16')
df1.drop('SUB_USAGE_16', axis=1).merge(s, on = ['JID','JR1SubUsageLabel_16'], how='left')

Output:

     JID JR1SubUsageLabel_16  SUB_USAGE_16
0   6223     JR1_BioOne_CY16           5.0
1   6510   JR1_Springer_CY16           6.0
2  11932     JR1_BioOne_CY16           1.0
3  14242     JR1_BioOne_CY16           NaN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM