Python 如何将一个函数从一列函数扩展到多列函数

Python 如何将一个函数从一列函数扩展到多列函数,python,pandas,dataframe,Python,Pandas,Dataframe,这是我的函数 def get_IV(df, feature, target): lst = [] unique_values = df[feature].unique() for val in unique_values: lst.append([feature, # Feature name val,

这是我的函数

def get_IV(df, feature, target):
    lst = []

    unique_values = df[feature].unique()
    for val in unique_values:
        lst.append([feature,                                                        # Feature name
                    val,                                                            # Value of a feature (unique)
                    df[(df[feature] == val) & (df[target] == 0)].count()[feature],  # Good (Fraud == 0)
                    df[(df[feature] == val) & (df[target] == 1)].count()[feature]   # Bad  (Fraud == 1)
                   ])
 
    data = pd.DataFrame(lst, columns=['Variable', 'Value', 'Good', 'Bad'])
        
    total_bad = df[df[target] == 1].count()[feature]
    total_good = df.shape[0] - total_bad
    
    data['Distribution Good'] = data['Good']/ total_good
    data['Distribution Bad'] = data['Bad'] / total_bad
    data['WoE'] = np.log(data['Distribution Good'] / data['Distribution Bad'])

    data = data.replace({'WoE': {np.inf: 0, -np.inf: 0}})

    data['IV'] = data['WoE'] * (data['Distribution Good'] - data['Distribution Bad'])

    data = data.sort_values(by=['Variable', 'Value'], ascending=[True, True])
    data.index = range(len(data.index))

    iv = data['IV'].sum()

    return iv

但要将其用于100列,我需要将其用于100次,例如:

get_IV(数据,'Column1','Label')
get_IV(数据,'Column2','Label')
, ...
get_IV(数据,'Column100','Label')

我需要的是更改输入

cols=['Column1','Column2',…,'Column100']

还有像这样的新功能

Column               IV
Column1         0.00035
Column2         0.01085
...
Column100       0.01281
get_IV(数据、列、标签)

我期望的输出是这样的数据帧

Column               IV
Column1         0.00035
Column2         0.01085
...
Column100       0.01281
def get_IV_all(数据、列、label=“label”):
col_iv_pairs=[(col,get_iv(数据,col,“标签”))表示col中的col]
df=pd.DataFrame(col_-iv_对,Column=[“Column”,“iv”])
返回df
通过列表理解形成一个2元组列表 并将其传递给
DataFrame
构造函数以获得:

>>> get_IV_all(data, cols, "Label")

       Column  IV
0     Column1   7
1     Column2   7
2     Column3   7
3     Column4   7
4     Column5   7
..        ...  ..
95   Column96   8
96   Column97   8
97   Column98   8
98   Column99   8
99  Column100   9

其中
cols=[f“Column{j}”表示范围(1100+1)内的j

似乎可以工作,等待我的机器计算