热线电话:13121318867

登录
2019-02-17 阅读量: 774
根据列值合并数据帧

我有2个大数据帧,低于2只是这些2的样子的例子。

df1 = pd.DataFrame(columns=['node', 'st1', 'st2'], data=[['a', 1, -1], ['b', 2, 2], ['c', 3, 4]])

node st1 st2

a 1 -1

b 2 2

c 3 4

df2 = pd.DataFrame(columns=['node', 'st1', 'st2'], data=[['a', 8, 5], ['b', 4, 6]])

node st1 st2

a 8 5

b 4 6

我想仅在两个数据帧中的节点名匹配时才使用df2,st1和st2列值更新df1,st1和st2列值。另外,如果df1中的st1或st2列值等于-1,则不要更新该行和列,即将其保持为-1。结果看起来像,

node st1 st2

a 8 -1

b 4 6

c 3 4

我尝试使用基本pandas与左连接合并来合并2个数据帧,这会给我一个带有重复列的df,然后循环遍历生成的df中的每一行以检查st1和st2的值,并仅在以下情况下替换它们它不是-1。但是这需要花费大量时间在较大的数据帧中,这就是为什么我想找到最有效的方法来实现这一点

解决办法:

可以设置node为索引在两个dataframes,设置为NaN所有值,除了-1s和使用DataFrame.combine_first,以填补NaNs在df1与值df2与共享索引:

df = df1.set_index('node')

df.where(df.eq(-1)).combine_first(df2.set_index('node')).fillna(df)

st1 st2

node

a 8.0 -1.0

b 4.0 6.0

c 3.0 4.0

0.0000
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子