Python 基于是否调用函数的新列
我有一个类,它根据初始关键字是真还是假来调用函数。目的是能够控制如何在dataframePython 基于是否调用函数的新列,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()
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