Python 如何修复函数以获得正确的计数
基于类别,我想使用函数创建一个新类别。然而,当我构建一个函数时,它没有得到正确的计数。我已经创建了一个示例数据供参考。请查看以下代码: 创建用于引用的数据帧 统计 ##使用函数调整类别Python 如何修复函数以获得正确的计数,python,pandas,Python,Pandas,基于类别,我想使用函数创建一个新类别。然而,当我构建一个函数时,它没有得到正确的计数。我已经创建了一个示例数据供参考。请查看以下代码: 创建用于引用的数据帧 统计 ##使用函数调整类别 def newcat(x,y): if x=="high": return "High_Risky" elif x=="medium" and y=="yes": return &quo
def newcat(x,y):
if x=="high":
return "High_Risky"
elif x=="medium" and y=="yes":
return "Medium_Risky"
elif x=="Low" and x=="others":
return "Low_Risky"
df['overdue_flag']=df.apply(lambda x:newcat(x['category'],x['overdue']),axis=1)
你可以试试这个:
将熊猫作为pd导入
df=pd.DataFrame({
“供应商”:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
“逾期”:[“是”、“否”、“是”、“否”、“是”、“否”、“是”、“否”、“否”、“是”、“否”、“否”、“否”、“否”、“否”、“是”、“否”],
“类别”:[“高”、“中”、“低”、“其他”、“中”、“低”、“低”、“其他”、“高”、“中”、“低”、“其他”、“中”、“低”、“其他”、“中”、“低”、“其他”]
})
def新_cat(df):
#创建默认值为“低风险”的新列“过期标志”
df.loc[:,“过期标志”]=“低风险”
#应用第一个条件
mask1=df['category']=“高”
df.loc[mask1,‘过期标志’]=“高风险”
#应用第二个条件
mask2=(df['category']==“medium”)&(df['supernate']==“yes”)
df.loc[mask2,‘过期标志’]=“中等风险”
返回df
df=新的_类(df)
打印(df)
#输出
供应商过期类别过期标志
0 1是高高高风险
1 2无中低风险
2 3是低风险
3 4无其他低风险
4 5是中等风险
5.6无低风险
6 7是低风险
7 8无其他低风险
8.9无高风险
9 10是中等风险
10 11无低风险
11 12无其他低风险
12 13无中低风险
13 14是低风险
14 15无其他低风险
如果您有多个If/else
条件,请使用np。选择(矢量化/快速)
只需在条件列表中提供条件,以及在选项列表中如何处理该特定条件-
import numpy as np
condlist = [
(df['category'] == "medium") & (df['overdue'] == "yes"),
(df['category'] == "high")
]
choicelist = [
'High_Risky',
'Medium_Risky'
]
df['overdue_flag'] = np.select(condlist,choicelist)
你对df['category']的结果做了什么?value_counts()
你希望你的结果df
是什么样子?当类别中等且过期no
时,结果应该是什么?旁白:你最后的elif
语句总是错误的,因为x
不能同时是==“低”
和==“其他”
。我想将高风险替换为高风险,将低风险替换为低风险,将中等风险替换为中等风险,将过期时的class='Yes'替换为中等风险设置错误键error:'过期标志'我没有收到任何错误,请参阅我的更新答案。
def newcat(x,y):
if x=="high":
return "High_Risky"
elif x=="medium" and y=="yes":
return "Medium_Risky"
elif x=="Low" and x=="others":
return "Low_Risky"
df['overdue_flag']=df.apply(lambda x:newcat(x['category'],x['overdue']),axis=1)
import numpy as np
condlist = [
(df['category'] == "medium") & (df['overdue'] == "yes"),
(df['category'] == "high")
]
choicelist = [
'High_Risky',
'Medium_Risky'
]
df['overdue_flag'] = np.select(condlist,choicelist)