簡體   English   中英

用列值上的另一個數據幀中的相同行替換數據幀行

[英]Replace dataframe rows with identical rows from another dataframe on a column value

我有一個數據幀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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM