Python 在计算结果中仅保留所选DF中的列行

Python 在计算结果中仅保留所选DF中的列行,python,pandas,dataframe,Python,Pandas,Dataframe,这是关于以下问题的后续问题: 我有以下数据: df1 = pd.DataFrame({"x":[1, 2, 3, 4, 5], "y":[3, 4, 5, 6, 7]}, index=['a', 'b', 'c', 'd', 'e']) df2 = pd.DataFrame({"y":[1, NaN, 3, 4, 5], "z":[3, 4, 5, 6, 7]}, index=['b', 'c', 'd', 'e', 'f']) 我想得到df1和df2

这是关于以下问题的后续问题:

我有以下数据:

df1 = pd.DataFrame({"x":[1, 2, 3, 4, 5], 
    "y":[3, 4, 5, 6, 7]}, 
    index=['a', 'b', 'c', 'd', 'e'])

df2 = pd.DataFrame({"y":[1, NaN, 3, 4, 5], 
    "z":[3, 4, 5, 6, 7]}, 
    index=['b', 'c', 'd', 'e', 'f'])
我想得到df1和df2的乘法,df2中的所有数据都保留了,因为df1中没有对应的条目,而df2中只有行和列

例如

给出:

    x     y    z
a NaN   NaN  NaN
b NaN   4.0  3.0
c NaN   NaN  4.0
d NaN  18.0  5.0
e NaN  28.0  6.0
f NaN   5.0  7.0
但我想达到:

   y     z
b 4.0   3.0
c NaN   4.0
d 18.0  5.0
e 28.0  6.0
f 5.0   7.0
注意:

可以有合法的NaN、Inf、-Inf值。 列/行可能并不总是位于结果DF的左侧或右侧/顶部或底部,尽管在上面的示例中就是这种情况。
我认为最简单的方法是获得索引和列的交集,如下所示:

In [1142]: c = df1.columns & df2.columns

In [1143]: i = df1.index & df2.index
现在,只需索引并与df.loc相乘:

   y     z
b 4.0   3.0
c NaN   4.0
d 18.0  5.0
e 28.0  6.0
f 5.0   7.0
In [1142]: c = df1.columns & df2.columns

In [1143]: i = df1.index & df2.index
In [1145]: df2.loc[i, c] *= df1.loc[i, c]; df2
Out[1145]: 
      y  z
b   4.0  3
c   NaN  4
d  18.0  5
e  28.0  6
f   5.0  7