在我看来,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 也会更新。
[我自己来这里寻找答案时,根据上面的评论构建了答案。]
在我所知道的当前版本中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
化和集成——取决于您的目的。