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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |