在列值上用来自另一个数据框的相同行替换数据框行

  • 本文关键字:数据 替换 另一个 python pandas
  • 更新时间 :
  • 英文 :


我有一个数据帧data,我取了g2_data的一个子集来执行一些操作。如何使用其中一列的值作为引用,将原始数据框中的值替换为子集中的值?

data的列结构保留在g2_data子集中,如下所示。

data:
idx  group   x1   y1
0         27      1  0.0  0.0
1         28      1  0.0  0.0
2         29      1  0.0  0.0
3         73      1  0.0  0.0
4         74      1  0.0  0.0
...    ...  ...  ...
14612  14674      8  0.0  0.0
14613  14697      8  0.0  0.0
14614  14698      8  0.0  0.0
14615  14721      8  0.0  0.0
14616  14722      8  0.0  0.0
[14617 rows x 4 columns]
g2_data:
idx  group     x1     y1
1125  1227      2  115.0    0.0
1126  1228      2    0.0  220.0
1127  1260      2    0.0    0.0
1128  1294      2    0.0    0.0
1129  1295      2    0.0    0.0
...    ...    ...    ...
3269  3277      2    0.0    0.0
3270  3308      2    0.0    0.0
3271  3309      2    0.0    0.0
3272  3342      2    0.0    0.0
3273  3343      2    0.0    0.0
[2149 rows x 4 columns]

使用来自另一个数据框的索引替换数据框中的行,使用行索引值可以回答这个问题,但我想使用idx列的值,以防我需要稍后在子集中重置索引(即从0开始,而不是使用原始数据框的索引值)。重要的是要注意idx列中的值都是唯一的,因为它们与每个观测值的信息有关。

这可能不是最优的,但是您可以将g2_data转换为字典,然后基于idx映射其他列,将更新过滤到g2_data子集中的那些id。

g2_data_dict = g2_data.set_index('idx').to_dict()
g2_data_ids = g2_data['idx'].to_list()
for k in g2_data_dict.keys():
data.loc[df['idx'].isin(g2_data_ids), k] = data['idx'].map(g2_data_dict[k])

使用combine_first:

out = g2_data.set_index('idx').combine_first(data.set_index('idx')).reset_index()

相关内容

最新更新