自动更新pandas中的列?

时间:2013-11-14 20:52:37

标签: python 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也会更新。

1 个答案:

答案 0 :(得分:0)

[当我来到这里亲自寻找答案时,它是根据以上评论构建而成的。]

在当前的pandas版本中,我没有这样的方式

要通过簿记来实现同一目的,您可以具有创建计算列的功能

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

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

或者,DataFrame用吸气剂包装在班上

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 并直接集成计算---取决于您的目的。