gpt4 book ai didi

python - 索引不匹配时更新 Pandas 数据框的最有效方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:56 25 4
gpt4 key购买 nike

我有两个 pandas DataFrame,我想用另一个更新一个...但我不能确定索引是否匹配。 (所以使用 DataFrame.update 是个问题!)

例子:

import pandas as pd
df1 = pd.DataFrame([('path1', 0, 0, 0),
('path2', 0, 0, 0),
('path3', 0, 0, 0),
('path4', 0, 0, 0),],
columns=['path', 'class', 'manual', 'conf'],
index = [1,2,3,4])

df2 = pd.DataFrame([('path1', 1, 0, 0),
('path2', 0, 1, 0),
('path3', 0, 0, 1),
('path5', 1, 1, 0),
('path6', 1, 1, 0),],
columns=['path', 'class', 'manual', 'conf'],
index = [10,11,12,13,14])

期望的结果:

update_annotations(df1, df2)

path class manual conf
1 path1 1 0 0
2 path2 0 1 0
3 path3 0 0 1
4 path4 0 0 0

df1.update(df2) 可能存在风险,因为这些数据帧的索引可能不匹配。这样做最安全和最有效的方法是什么?

最佳答案

快速而肮脏

df1[['path']].merge(df2, 'left')

path class manual conf
0 path1 1.0 0.0 0.0
1 path2 0.0 1.0 0.0
2 path3 0.0 0.0 1.0
3 path4 NaN NaN NaN

较慢且较脏

df1[['path']].merge(df2, 'left').fillna(0).astype(df1.dtypes)

path class manual conf
0 path1 1 0 0
1 path2 0 1 0
2 path3 0 0 1
3 path4 0 0 0

迂腐

df1填充NaN

df1[['path']].merge(df2, 'left').fillna({**df1}).astype(df1.dtypes)

path class manual conf
0 path1 1 0 0
1 path2 0 1 0
2 path3 0 0 1
3 path4 0 0 0

根据 Chris

df1.set_index('path').assign(**df2.set_index('path')).reset_index()

path class manual conf
0 path1 1.0 0.0 0.0
1 path2 0.0 1.0 0.0
2 path3 0.0 0.0 1.0
3 path4 NaN NaN NaN

保留索引

既然顺序保证是一样的,我们可以只使用set_index

df1[['path']].merge(df2, 'left').fillna({**df1}).astype(df1.dtypes).set_index(df1.index)

path class manual conf
1 path1 1 0 0
2 path2 0 1 0
3 path3 0 0 1
4 path4 0 0 0

关于python - 索引不匹配时更新 Pandas 数据框的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55634069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com