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

python – 减去行数不等的数据帧,第1张

概述我有两个像这样的数据帧 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.ra 我有两个像这样的数据帧

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'),columns=List('abcd'))   a  b  c  dA  5  0  3  3B  7  9  3  5C  2  4  7  6D  8  8  1  6E  7  7  8  1   a  b  c  dC  5  9  8  9E  4  3  0  3

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

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

a    b    c    dA  NaN  NaN  NaN  NaNB  NaN  NaN  NaN  NaNC -3.0 -5.0 -1.0 -3.0D  NaN  NaN  NaN  NaNE  3.0  4.0  8.0 -2.0

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

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

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

这给了我想要的输出

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

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

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

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

以上是内存溢出为你收集整理的python – 减去行数不等的数据帧全部内容,希望文章能够帮你解决python – 减去行数不等的数据帧所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存