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
似乎可以工作,等待我的机器计算