[英]How to ensure within a class, deleting row from one data frame deletes a row in another data frame
我的問題是 class 具有多個(比如說 2 個)數據幀,我想確保從一個數據幀中刪除一行也會從另一個數據幀中刪除同一行。 所以基本上它們應該始終保持同步。
例如
class C:
def __init__(self, df1, df2):
self.df1 = df1
self.df2 = df2
del C.df1[0] # -> means C.df2[0] will also be deleted
C.df1 = C.df1[0:10] # slicing also means df2 will be sliced
一般來說,您正在尋找的是類似於setter的東西,它是 class 上的一種方法,只要設置了某個屬性,它就會運行一些代碼。 在 python 中,有幾種方法可以在 class 上編寫設置器。 我建議您閱讀類似https://www.python-course.eu/python3_properties.php
但是,這僅適用於設置屬性,例如
instance.df1 = some_df
要檢查 dataframe 列的更改,您可以使用觀察者模式go 並將您的 df 屬性包裝到觀察者 class 中。 演示原理:
from typing import Any, Callable, Mapping
class ObservedAttribute:
def __init__(
self, value: Mapping, callback: Callable[[Any, Any], None]
) -> None:
self._value = value
self.callback = callback
def __getimen__(self, key: Any) -> None:
return self._value.__getitem__(key)
def __setitem__(self, key: Any, value: Any) -> None:
self._value.__setitem__(key, value)
self.callback(key, value)
class ObservedClass:
def __init__(self, attr_1: Mapping, attr_2: Mapping) -> None:
self._attr_1 = ObservedAttribute(attr_1, self.attr_1_observer)
self.attr_2 = attr_2
def attr_1_observer(self, key, value):
self.attr_2.__setitem__(key, value)
@property
def attr_1(self):
return self._attr_1
instance = ObservedClass({"a": 1}, {"a": 2})
instance.attr_1["a"] = "newValue"
print(instance.attr_2["a"]) # "newValue"
話雖如此,我強烈認為您的實際問題出在其他地方。 您保持兩個數據幀同步的想法聽起來很像反模式。 除其他外,您的方法會出現以下問題:
所以我建議你重新考慮你的整個方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.