Gho*_*der 2 python function pandas
我刚刚问了以下问题
Pandas:如何将列名传递给可以在“apply”中使用的函数?
我得到了很好的答复。然而,这个问题有一个延伸,我忽略了,也很好奇。
我有一个功能:
def generate_confusion_matrix(row):
val=0
if (row['biopsy_bin']==0) & (row['pioped_logit_category'] == 0):
val = 0
if (row['biopsy_bin']==1) & (row['pioped_logit_category'] == 1):
val = 1
if (row['biopsy_bin']==0) & (row['pioped_logit_category'] == 1):
val = 2
if (row['biopsy_bin']==1) & (row['pioped_logit_category'] == 0):
val = 3
if row['pioped_logit_category'] == 2:
val = 4
return val
Run Code Online (Sandbox Code Playgroud)
我希望将其通用化,如下所示:
def general_confusion_matrix(biopsy, column_name):
val=0
if biopsy==0:
if column_name == 0:
val = 0
elif column_name == 1:
val = 1
elif biopsy==1:
if column_name == 1:
val = 2
elif column_name == 0:
val = 3
elif column_name == 2:
val = 4
return val
Run Code Online (Sandbox Code Playgroud)
这样我就可以将它应用到这个函数中,就像这样(这不起作用)。
def create_logit_value(df, name_of_column):
df[name_of_column + '_concordance'] = df.apply(lambda : general_confusion_matrix('biopsy', name_of_column + '_category'), axis=1)
Run Code Online (Sandbox Code Playgroud)
问题似乎是,当您将列作为 df['biopsy'] 传递时,您将一系列传递给general_confusion_matrix 函数,而不是每行的值,并且条件语句抛出和通常的
('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')"
Run Code Online (Sandbox Code Playgroud)
我已经尝试了 map 和 apply,但我不确定如何将引用数据框中的列的 2 个参数传递给 lambda 语句中的函数。我想我可以使用地图,但同样,我如何通过它传递参数。我很抱歉写了两个密切相关的问题,但它们是不同的。
我认为你很接近:
df = pd.DataFrame({'biopsy_bin':[0,1,0,1,0,1],
'pioped_logit_category':[0,0,0,1,1,1],
'a_category':[0,0,0,1,1,1]})
print (df)
def create_logit_value(df, name_of_column):
df[name_of_column + '_concordance'] = df.apply(lambda x: generate_confusion_matrix(x['biopsy_bin'], x[name_of_column + '_category']), axis=1)
return (df)
create_logit_value(df, 'a')
create_logit_value(df, 'pioped_logit')
a_category biopsy_bin pioped_logit_category a_concordance \
0 0 0 0 0
1 0 1 0 3
2 0 0 0 0
3 1 1 1 2
4 1 0 1 1
5 1 1 1 2
pioped_logit_concordance
0 0
1 3
2 0
3 2
4 1
5 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10779 次 |
| 最近记录: |