2

在我看来,pandas 为我提供了一个虚拟电子表格,比如 Excel。关于 Excel 电子表格的一件事是您可以将列设置为函数。例如

          T_c    T    T_r
Series 1    1    ?    T/T_c
Series 2    2    ?    T/T_c

有什么方法可以创建一个 DataFrame 以便列 T_r 跟踪对列 T 所做的任何更改?换句话说,只要 T 更新,T_r 也会更新。

4

1 回答 1

3

[我自己来这里寻找答案时,根据上面的评论构建了答案。]

在我所知道的当前版本中pandas ,没有这样的方法。

要通过一些簿记来实现相同的目的,您可以使用一个函数来创建计算列

def update_computed_column(df):
    df['c'] = df['a'] / df['b']

然后在您有兴趣检查该值时调用它。

或者,将 包装DataFrame在一个带有 getter 的类中

class WrappedDataFrame:
    def __init__(self, df):
        self._df = df
        self._update_computed_columns()

    def _update_computed_columns(self):
        # Define all your computed columns
        self._df['c'] = self._df['a'] / self._df['b']

    @property
    def df(self):
        self._update_computed_columns()
        return self._df

因此,修改数据将自动重新计算列。

>>> a = WrappedDataFrame(DataFrame.from_dict({'a': [1, 2, 3], 'b': [4, 5, 6]}))
>>> print(a.df)
   a  b     c
0  1  4  0.25
1  2  5  0.40
2  3  6  0.50
>>> a.df['a'] = [7, 8, 9]
>>> print(a.df)
   a  b     c
0  7  4  1.75
1  8  5  1.60
2  9  6  1.50

这可以通过添加新计算列、将其公式作为函数存储在私有字典中等方法来增强。

或者,您可以直接对计算进行子类DataFrame化和集成——取决于您的目的。

于 2019-12-19T15:51:30.977 回答