注意:该问题已被编辑和扩展,因为它最初缺乏精确性。 第一个示例介绍了问题,但仅应视为介绍
有两个数据集,如下所示:
idx value other_columns
1 7
2 6
3 5
idx value ...other_columns
1 0
2 0
4 0
我想复制有关索引列的第一个数据集值(并在不匹配的列上设置 NaN)
获取:
idx value ...other_columns
1 7
2 6
4 NaN
问候
编辑:
关于我最初的帖子,EdChum 的回答是正确的,但我的问题缺乏精确性。
other_columns 意味着我想保持其他列不变,我的目标是将 dataset1 中的值插入 dataset2 中。 更精确的示例:
df1= pd.DataFrame({'idx':[1,2,3], 'val':[7,6,5], 'other':[1,1,1]})
df2= pd.DataFrame({'idx':[1,2,4], 'val':[0,0,0], 'other':[1,1,1]})
df1
idx other val
0 1 1 7
1 2 1 6
2 3 1 5
df2
idx other val
0 1 7 0
1 2 7 0
2 4 7 0
我想检索
idx other val
0 1 7 7
1 2 7 6
2 4 7 NaN
这是 Fuego 基于合并的 anwser 的子框架,但我还不知道如何只保留 ['idx','val_x','other_y'] 列。
最佳答案
使用重新索引
In [142]:
df1.reindex(df2.index)
Out[142]:
value other_columns
idx
1 7.0 NaN
2 6.0 NaN
4 NaN NaN
reindex_like
也有效:
In [143]:
df1.reindex_like(df2)
Out[143]:
value ...other_columns
idx
1 7.0 NaN
2 6.0 NaN
4 NaN NaN
或者使用loc
基于标签的索引:
In [144]:
df1.loc[df2.index]
Out[144]:
value other_columns
idx
1 7.0 NaN
2 6.0 NaN
4 NaN NaN
如果idx
确实是一列,那么您需要首先调用set_index
,然后记录以上任何内容:
In [148]:
df1.set_index('idx').reindex(df2.set_index('idx').index).reset_index()
Out[148]:
idx value other_columns
0 1 7.0 NaN
1 2 6.0 NaN
2 4 NaN NaN
关于python pandas 如何复制有关索引列的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41260764/