【发布时间】:2017-08-07 13:01:44
【问题描述】:
这是一个后续问题:How to treat NaN or non aligned values as 1s or 0s in multiplying pandas DataFrames
我有以下数据:
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 中只有行和列。
例如
print (df1.mul(df2).fillna(df2))
或
print (df1.mul(df2).combine_first(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 的左侧或右侧/顶部或底部,尽管在上面的示例中是这种情况。
【问题讨论】: