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