举个例子:
from pandas import DataFrame, isna
from numpy import nan
df = DataFrame([
{'id': '1', 'x': 2, 'y': 3, 'z': 4},
{'id': '5', 'x': 6, 'y': 7, 'z': 8},
{'id': '9', 'x': 10, 'y': 11, 'z': 12}
]).set_index('id')
factors = DataFrame([
{'id': '5', 'x': nan, 'z': 3},
{'id': '9', 'x': 0.2, 'z': nan},
]).set_index('id')
for row_id in factors.index:
for col in factors.columns:
if not isna(factors[col][row_id]):
df[col][row_id] *= factors[col][row_id]
如果df
中的值与factors
中的非NaN值相乘,是否有更干净的方法来处理pandas
?(或者numpy
关于这个问题)我看了一下.mul()
,但这似乎不允许我做这里需要做的事情
此外,如果factors包含不在df
中的id
行,例如:
factors = DataFrame([
{'id': '5', 'x': nan, 'z': 3},
{'id': '13', 'x': 2, 'z': 4},
]).set_index('id')
既然您说的是“pandas(或numpy)”,那么让我建议^{} ,这是PyData对N-D标记数组的回答。xarray是专门为涉及具有多个相应维度的标记阵列的问题而设计的,例如,您希望通过numpy阵列的性能和广播行为获得pandas索引的所有便利
对于这个问题,您可以将数据帧转储到xarrayDataArrays:
然后,您可以广播
factors_da
以像da
一样索引:然后将它们相乘(第一个填充因子为1,因此保留缺失值):
然后你就可以把这些东西倒回到熊猫身上:
如果我正确理解您的问题,您可以使用
.update
+.mul
:印刷品:
对于第二个示例(如果factors包含id不在df中的行),这将打印:
相关问题 更多 >
编程相关推荐