鉴于此数据框:

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/

10-12 21:58