加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 减去行数不等的数据帧

发布时间:2020-12-20 11:59:59 所属栏目:Python 来源:网络整理
导读:我有两个像这样的数据帧 import pandas as pdimport numpy as npnp.random.seed(0)df1 = pd.DataFrame(np.random.randint(10,size=(5,4)),index=list('ABCDE'),columns=list('abcd'))df2 = pd.DataFrame(np.random.randint(10,size=(2,index=list('CE'),colu
我有两个像这样的数据帧

import pandas as pd
import numpy as np

np.random.seed(0)

df1 = pd.DataFrame(np.random.randint(10,size=(5,4)),index=list('ABCDE'),columns=list('abcd'))
df2 = pd.DataFrame(np.random.randint(10,size=(2,index=list('CE'),columns=list('abcd'))

   a  b  c  d
A  5  0  3  3
B  7  9  3  5
C  2  4  7  6
D  8  8  1  6
E  7  7  8  1

   a  b  c  d
C  5  9  8  9
E  4  3  0  3

df2的索引始终是df1索引的子集,列名相同.

我想创建第三个数据帧df3 = df1 – df2.如果一个人这样做,就得到了

a    b    c    d
A  NaN  NaN  NaN  NaN
B  NaN  NaN  NaN  NaN
C -3.0 -5.0 -1.0 -3.0
D  NaN  NaN  NaN  NaN
E  3.0  4.0  8.0 -2.0

我不希望输出中的NA,而是df1的相应值.有没有一种聪明的方式来使用,例如在df2中未包含的行中,df1的值是否为fillna?

解决方法是仅减去所需的行,如:

sub_ind = df2.index
df3 = df1.copy()
df3.loc[sub_ind,:] = df1.loc[sub_ind,:] - df2.loc[sub_ind,:]

这给了我想要的输出

a  b  c  d
A  5  0  3  3
B  7  9  3  5
C -3 -5 -1 -3
D  8  8  1  6
E  3  4  8 -2

但也许有一种更直接的方法来实现这一目标?

解决方法

如果使用sub方法而不是 –,则可以传递填充值:

df1.sub(df2,fill_value=0)
Out: 
     a    b    c    d
A  5.0  0.0  3.0  3.0
B  7.0  9.0  3.0  5.0
C -3.0 -5.0 -1.0 -3.0
D  8.0  8.0  1.0  6.0
E  3.0  4.0  8.0 -2.0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读