【发布时间】:2023-03-30 12:54:02
【问题描述】:
这是一个一般的 Python 问题。是否可以将不同的变量分配给类对象,然后对这些变量执行不同的操作集?我正在尝试减少代码,但也许这不是它的工作方式。例如,我正在尝试做这样的事情:
编辑:这是类和方法的摘要:
class Class:
def __init__(self, df):
self.df = df
def query(self, query):
self.df = self.df.query(query)
return self
def fill(self, filter):
self.df.update(df.filter(like=filter).mask(lambda x: x == 0).ffill(1))
return self
def diff(self, cols=None, axis=1):
diff = self.df[self.df.columns[~self.df.columns.isin(cols)]].diff(axis=axis)
self.df = diff.join(self.df[self.df.columns.difference(diff.columns)])
return self
def melt(self, cols, var=None, value=None):
return pd.melt(self.df, id_vars=columns, var_name=var, value_name=value)
我正在尝试这样使用它:
df = pd.read_csv('data.csv')
df = Class(df)
df = df.query(query).forward_fill(include)
df_1 = df.diff(cols).melt(cols)
df_2 = df.melt(cols)
df_1 和df_2 应该有不同的值,但它们与df_1 相同。如果我使用这样的类,这个问题就解决了:
df_1 = pd.read_csv('data.csv')
df_2 = pd.read_csv('data.csv')
df_1 = Class(df_1)
df_2 = Class(df_2)
df_1 = df_1.query(query).forward_fill(include)
df_2 = df_2.query(query).forward_fill(include)
df_1 = df_1.diff(cols).melt(cols)
df_2 = df_2.melt(cols)
这会产生额外的代码。有没有更好的方法来做到这一点,您可以在不同的变量上以不同的方式使用对象,或者如果我试图让两个变量执行单独的操作并返回不同的值,我是否必须创建单独的对象?
【问题讨论】:
-
你能告诉我们
oper_1和oper_2在做什么吗? -
它们是
pandas链接在一起的数据帧操作 -
显示
Class的定义,让我们重现错误。您还需要包括预期和观察到的输出。 -
2 + 5和3 + 4也产生相同的输出,但这并不意味着其中一个是错误的。 -
@chepner 添加了课程详情
标签: python python-3.x pandas oop object