![](/img/trans.png)
[英]Replace values of certain column and rows in a DataFrame with the value of another column in the same dataframe with Pandas
[英]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.