您好我有2个大型pandas数据帧,df和df1。
df是这样的,其值为0。
df:
Amazon Apple Blackberry Yahoo Google
1/1/2000 0 13 0 42 0
1/1/2001 0 41 0 53 0
1/1/2002 34 42 0 64 0
1/1/2003 45 63 0 74 0
1/1/2004 43 74 24 75 0
1/1/2005 0 89 25 86 25
现在我有df1,它也有一些相互的列名和行索引。例如:
df1:
Amazon Apple Blackberry Yahoo Google
1/1/2000 0 0 0 53 53
1/1/2001 24 0 53 53 42
1/1/2002 42 31 53 53 74
1/1/2003 52 43 53 0 89
1/1/2004 52 53 0 0 99
1/1/2005 24 53 0 0 100
现在我想使用df,并维护df中的所有值。但是当df中有0时,我想查找df1并将df1的值填充到df中,因为列名和索引日期是相同的。
例如,输出将是这样的:
dfoutput
Amazon Apple Blackberry Yahoo Google
1/1/2000 0 13 0 42 53
1/1/2001 24 41 53 53 42
1/1/2002 34 42 53 64 74
1/1/2003 45 63 53 74 89
1/1/2004 43 74 24 75 99
1/1/2005 24 89 25 86 25
如果df1中的df不匹配,则df中的值保持为0。实际上,df和df1在较大的数据集中确实略有不同。
感谢。
答案 0 :(得分:2)
您可以使用combine_first
或(fillna
)将add
替换为0
:
NaN
df2 = df.replace(0,np.nan).combine_first(df1.replace(0,np.nan))
#alternatively
#df2 = df.replace(0,np.nan).fillna(df1.replace(0,np.nan))
print (df2)
Amazon Apple Blackberry Yahoo Google
1/1/2000 NaN 13 NaN 42 53.0
1/1/2001 24.0 41 53.0 53 42.0
1/1/2002 34.0 42 53.0 64 74.0
1/1/2003 45.0 63 53.0 74 89.0
1/1/2004 43.0 74 24.0 75 99.0
1/1/2005 24.0 89 25.0 86 25.0
最后将df2 = df.mask(df==0).combine_first(df1.mask(df1==0))
#alternatively
#df2 = df.mask(df==0).fillna(df1.mask(df1==0))
print (df2)
Amazon Apple Blackberry Yahoo Google
1/1/2000 NaN 13 NaN 42 53.0
1/1/2001 24.0 41 53.0 53 42.0
1/1/2002 34.0 42 53.0 64 74.0
1/1/2003 45.0 63 53.0 74 89.0
1/1/2004 43.0 74 24.0 75 99.0
1/1/2005 24.0 89 25.0 86 25.0
替换为NaN
并转换为0
:
int