Python 循环浏览每一行并给客户打分
我正在尝试循环我的数据框架,并在Python 循环浏览每一行并给客户打分,python,pandas,Python,Pandas,我正在尝试循环我的数据框架,并在Mbr grade列中为公司成员添加一个等级。一个条件是基于他们花费的金额,另一个是基于他们拥有的交易数量 def MbrGrade(): for index, row in MbrKPI.iterrows(): if MbrKPI['Amt']>500 & MbrKPI['Transaction No_']>10: MbrKPI['Mbr grade']='A' elif
Mbr grade
列中为公司成员添加一个等级。一个条件是基于他们花费的金额,另一个是基于他们拥有的交易数量
def MbrGrade():
for index, row in MbrKPI.iterrows():
if MbrKPI['Amt']>500 & MbrKPI['Transaction No_']>10:
MbrKPI['Mbr grade']='A'
elif MbrKPI['Amt']>500 & MbrKPI['Transaction No_']<10:
MbrKPI['Mbr grade']='B'
elif MbrKPI['Amt']<500 & MbrKPI['Transaction No_']<10:
MbrKPI['Mbr grade']='C'
MbrGrade()
def MbrGrade():
对于索引,MbrKPI.iterrows()中的行:
如果MbrKPI['Amt']>500和MbrKPI['Transaction No']>10:
MbrKPI['Mbr等级']='A'
elif MbrKPI['Amt']>500&MbrKPI['Transaction No']使用np.where
MbrKPI = pd.DataFrame([
[501, 11],
[501, 9],
[499, 9]
], columns=['Amt', 'Transaction No_'])
a = MbrKPI['Amt'].values
t = MbrKPI['Transaction No_'].values
MbrKPI['MbrGrade'] = np.where(a > 500, np.where(t > 10, 'A', 'B'), 'C')
MbrKPI
注意:
您没有地址10
,所以我忽略了它。
你应该能够相应地适应。
注2:
另外,注意边缘情况==500
和==10
使用np。其中
MbrKPI = pd.DataFrame([
[501, 11],
[501, 9],
[499, 9]
], columns=['Amt', 'Transaction No_'])
a = MbrKPI['Amt'].values
t = MbrKPI['Transaction No_'].values
MbrKPI['MbrGrade'] = np.where(a > 500, np.where(t > 10, 'A', 'B'), 'C')
MbrKPI
注意:
您没有地址10
,所以我忽略了它。
你应该能够相应地适应。
注2:
另外,注意边缘情况==500
和==10
我认可并警告您的状况存在差距。np.where
方法非常紧凑且矢量化良好
然而,这可能有点难理解为什么它对刚接触熊猫的人有效。下面是一种跟踪普通Python逻辑和表单的方法。它几乎没有很好的矢量化——但除非您有非常大的数据集,否则这可能不是问题
def决定等级(行):
金额,交易记录=第['amt']行,第['Transaction No']
如果金额>500且交易记录>10:返回“A”
如果金额>500且变速箱<10:返回“B”
如果金额<500且变速箱<10:返回“C”
返回'???'
MbrKPI['Grade']=MbrKPI.apply(决定等级,轴=1)
它使用一个决策函数,decise_grade
,将决定一个等级的逻辑与索引和行创建代码分开。axis=1
表示所应用的函数依次获取数据帧的每一行(默认值为axis=0
,依次传递每一列)。然后,决策函数将行值“分解”为两个标量变量,以便以最简单、最清晰的方式陈述其决策逻辑
对于较大的数据集,结果如下:
无论您选择哪条路径,请注意,“行循环”如果没有错的话,也不是熊猫习语。应用决策函数,以向量形式计算新列是更新数据帧的性能更好、更惯用的方法。与传统循环相比,它们更接近数据库查询/数据操作语句。我赞同并警告您的条件中存在的差距。np.where
方法非常紧凑且矢量化良好
然而,这可能有点难理解为什么它对刚接触熊猫的人有效。下面是一种跟踪普通Python逻辑和表单的方法。它几乎没有很好的矢量化——但除非您有非常大的数据集,否则这可能不是问题
def决定等级(行):
金额,交易记录=第['amt']行,第['Transaction No']
如果金额>500且交易记录>10:返回“A”
如果金额>500且变速箱<10:返回“B”
如果金额<500且变速箱<10:返回“C”
返回'???'
MbrKPI['Grade']=MbrKPI.apply(决定等级,轴=1)
它使用一个决策函数,decise_grade
,将决定一个等级的逻辑与索引和行创建代码分开。axis=1
表示所应用的函数依次获取数据帧的每一行(默认值为axis=0
,依次传递每一列)。然后,决策函数将行值“分解”为两个标量变量,以便以最简单、最清晰的方式陈述其决策逻辑
对于较大的数据集,结果如下:
无论您选择哪条路径,请注意,“行循环”如果没有错的话,也不是熊猫习语。应用决策函数,以向量形式计算新列是更新数据帧的性能更好、更惯用的方法。与传统循环相比,它们更接近数据库查询/数据操作语句。谢谢!帮助我更好地理解函数的用法谢谢!帮助我更好地理解函数的使用