Python 基于是否调用函数的新列

Python 基于是否调用函数的新列,python,pandas,Python,Pandas,我有一个类,它根据初始关键字是真还是假来调用函数。目的是能够控制如何在dataframedf中创建新列。该类和函数的简略版本如下: class DFSetter: def __init__(self, justify=True, caps=True, table=True): if justify: self.set_justify() if caps: self.set_all_caps()

我有一个类,它根据初始关键字是真还是假来调用函数。目的是能够控制如何在dataframe
df
中创建新列。该类和函数的简略版本如下:

class DFSetter:

    def __init__(self, justify=True, caps=True, table=True):
        if justify:
            self.set_justify()
        if caps:
            self.set_all_caps()
        if self.table:
            self.set_table()

    def set_justify(self):
        self.justify = (self.df['jc'] != self.df['jc'].shift())

    def set_all_caps(self):
        self.all_caps = ((self.df['caps']==True) & (self.df['cap_diffs']>5))

    def set_table(self):
        self.table = ((self.df['table'] == True) & (self.df['table'].shift() == False))
假设我想在此数据帧中创建一个新列,
row\u break
,如果满足任何条件,它将设置为
True
。如果通过将其中一个函数的调用初始化为
False
而关闭,如何创建此新列

这就是我目前在所有设置为真的情况下的做法:

self.df['row_break']=(self.justify | self.all | caps | self.table | pStyle)

*更新答案*

使用附加的
self.switches={}
初始化,并向每个函数添加
self.switches.update({'item':self.item})

从self.switches字典创建一个新的数据帧:
self.switches\u df=(self.switches)

在主self.df数据帧上设置“row\u break”列,方法是查看是否有任何列为真:
self.df['row\u break']=(self.switches\u df.any(axis='columns')

i、 e


您可以将新列初始化为false,然后针对设置为true的每个条件更新它

这里我假设dataframe是类的输入之一(因为您使用的是
self.df


或者,保持相同的想法,
self.df['row\u break']
赋值可以在每个if语句中完成。这样,
set\u
-方法将保持更干净。

谢谢@Shaido-我已经用我的答案更新了我的问题,但我已经将你的答案标记为正确,因为我认为它更干净
class DFSetter:

    def __init__(self, justify=True, caps=True, table=True):

        self.switches={}
        if justify:
            self.set_justify()
        if caps:
            self.set_all_caps()
        if self.table:
            self.set_table()

    def set_justify(self):
        self.justify = (self.df['jc'] != self.df['jc'].shift())
        self.switches.update({'justify':self.justify})

    def set_all_caps(self):
        self.all_caps = ((self.df['caps']==True) & (self.df['cap_diffs']>5))
        self.switches.update({'caps':self.all_caps})

    def set_table(self):
        self.table = ((self.df['table'] == True) & (self.df['table'].shift() == False))
        self.switches.update({'table':self.table})

    def set_row_break(self):
        switches_df = pd.DataFrame(self.switches)
        self.df['row_break'] = switches_df.any(axis='columns')
class DFSetter:

    def __init__(self, df, justify=True, caps=True, table=True):

        self.df = df
        self.df['row_break'] = False

        if justify:
            self.set_justify()
        if caps:
            self.set_all_caps()
        if self.table:
            self.set_table()

    def set_justify(self):
        self.justify = (self.df['jc'] != self.df['jc'].shift())
        self.df['row_break'] = self.df['row_break'] | self.justify

    def set_all_caps(self):
        self.all_caps = ((self.df['caps']==True) & (self.df['cap_diffs']>5))
        self.df['row_break'] = self.df['row_break'] | self.all_caps 

    def set_table(self):
        self.table = ((self.df['table'] == True) & (self.df['table'].shift() == False))
        self.df['row_break'] = self.df['row_break'] | self.table