pandas高效实现条件逻辑

作者|Louis Chan 编译|VK 来源|Towards Data Science

Python可以说是当今最酷的编程语言(多亏了机器学习和数据科学),但与最好的编程语言之一C相比,它的效率并不是很高。

在开发机器学习模型时,很常见的情况是,我们需要根据从统计分析或上一次迭代的结果导出的硬编码规则,然后以编程方式更新。承认这一点并不羞耻:我一直在用Pandas apply编写代码,直到有一天我对嵌套非常厌烦,于是决定研究(又称Google)其他更可维护、更高效的方法

演示数据集

我们将要使用的数据集是iris数据集,你可以通过pandas或seaborn免费获得它。

import pandas as pd
iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')

# import seaborn as sns
# iris = sns.load_dataset("iris")

iris数据集的前5行

数据统计信息

假设在初始分析之后,我们希望用以下逻辑标记数据集:

  • 如果萼片长度(sepal length)< 5.1,则标签为0;

  • 否则,如果萼片宽度(sepal width)> 3.3和萼片长度< 5.8,则标签为1;

  • 否则,如果萼片宽度> 3.3,花瓣长度(petal length)> 5.1,则标签为2;

  • 否则,如果萼片宽度> 3.3,花瓣长度< 1.6且萼片长度< 6.4或花瓣宽度< 1.3,则标签3;

  • 否则,如果萼片宽度>3.3且萼片长度< 6.4或花瓣宽度< 1.3,则标签为4;

  • 否则,如果萼片宽度> 3.3,则标签为5;

  • 否则标签6

在深入研究代码之前,让我们快速地将一个新的label列设置为None:

iris['label'] = None
Pandas.iterrows+嵌套If Else块

如果你还在用这个,这篇博文绝对是适合你的地方!

%%timeit
for idx, row in iris.iterrows():
  if row['sepal_length'] < 5.1:
    iris.loc[idx, 'label'] = 0
  elif row['sepal_width'] > 3.3:
    if row['sepal_length'] < 5.8:
      iris.loc[idx, 'label'] = 1
    elif row['petal_length'] > 5.1:
      iris.loc[idx, 'label'] = 2
    elif (row['sepal_length'] <
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值