Python 读取数据帧,当数据帧为零时,在另一个数据帧中查找相同的列名和行名并填充

Python 读取数据帧,当数据帧为零时,在另一个数据帧中查找相同的列名和行名并填充,python,pandas,dataframe,Python,Pandas,Dataframe,你好,我有两个大熊猫数据帧,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

你好,我有两个大熊猫数据帧,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中

Eg输出如下所示:

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
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

最后将
NaN
替换为
0
并转换为
int

df2 = df2.fillna(0).astype(int)
print (df2)
          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
df2 = df2.fillna(0).astype(int)
print (df2)
          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