鉴于此数据框:
import pandas as pd
import numpy as np
data = {'column1': [True,False, False, True, True],
'column2' : [np.nan,0.21, np.nan, 0.2222, np.nan],
'column3': [1000, 0, 0, 0, 0 ]}
df = pd.DataFrame.from_dict(data)
print(df)
column1 column2 column3
0 True NaN 1000
1 False 0.2100 0
2 False NaN 0
3 True 0.2222 0
4 True NaN 0
当 column2 行不是 NaN 时,如何将 column2 的结果与 column3 的先前值相乘,否则只返回 column3 的先前值?
结果应该是这样的:
column1 column2 column3
0 True NaN 1000
1 False 0.2100 210
2 False NaN 210
3 True 0.2222 46.662
4 True NaN 46.662
我一直在浏览类似的问题,但我就是无法理解它..
我很感激你的意见:)
最佳答案
我会定义一个虚拟类来累积 column3 的最后一个值,然后遍历行来进行计算。如果这样做,就可以避免编写 for 循环,并将计算集中在 map 调用中,例如可以轻松并行运行
class AccumMult:
def __init__(self):
self.last_val = None
def mult(self, c2, c3):
self.last_val = c3 if self.last_val is None else self.last_val
if not np.isnan(c2):
self.last_val = self.last_val * c2
return self.last_val
m = AccumMult()
df["column3"] = list(map(lambda x: m.mult(x[0], x[1]), df[["column2", "column3"]].values.tolist()))
关于python - 乘以包含 NaN 的 Pandas 系列行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57588604/