我有一個資料幀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]
使用來自另一個 Dataframe 的索引替換 Dataframe 中的行可以使用行的索引值來執行此操作,但我想使用idx列中的值來執行此操作,以防稍后我需要重置子集中的索引(即從 0 開始,而不是使用原始資料幀中的索引值)。重要的是要注意,idx列中的值都是唯一的,因為它們與有關每個觀察的資訊有關。
uj5u.com熱心網友回復:
這可能不是最優的,但您可以轉換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])
uj5u.com熱心網友回復:
使用combine_first:
out = g2_data.set_index('idx').combine_first(data.set_index('idx')).reset_index()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317967.html
