文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python pandas怎么遍历每行并累加进行条件过滤

2023-06-30 13:15

关注

今天小编给大家分享一下python pandas怎么遍历每行并累加进行条件过滤的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

pandas遍历每行并累加进行条件过滤

python pandas怎么遍历每行并累加进行条件过滤

 本次记录主要实现对每行进行排序,并保留前80%以前的偏好。

思路:

将每行的概率进行排序,然后累加,累加值小于等于0.8的偏好保留,获得一个累加过滤的dataframe,然后映射回原始数据中,保留每行的偏好。接下来是代码的实现

a = [[0.2, 0.35, 0.45], [0.1,0.2, 0.7], [0.3, 0.5, 0.2]]data = pd.DataFrame(a, index=['user1','user2','user3'], columns=["a", "b", "c"])
sum_df=[]for index,row in data.iterrows():    df = row.sort_values(ascending=False).cumsum()    if df[0]>0.8:        new_df = df[:1]    else:        new_df = df[df<=0.8]    sum_df.append(new_df)sum_df = pd.DataFrame(sum_df)print(sum_df)

python pandas怎么遍历每行并累加进行条件过滤

这是累加之后每个用户保留的前80%偏好的类型,接下来如何将这个特征映射回去,将累加后的dataframe通过空值将其转化为0-1dataframe,再和原数据集一一对应相乘,就可以映射回去了,代码如下

d = (sum_df.notnull())*1print(d)

python pandas怎么遍历每行并累加进行条件过滤

final_df = d*data #将保留地特征映射到原始数据中print(final_df)

python pandas怎么遍历每行并累加进行条件过滤

本节内容目标明确,实现了每个用户的前80%偏好,不知道正在看的小伙伴有没有懂?可以一起讨论哦!

接下来,考虑优化这个实现的代码,前面的思路是通过两个dataframe相乘实现的,当数据集非常大的时候,效率很低,于是不用list,利用字典的形式实现

sum_df=[]for index,row in data.iterrows():    df = row.sort_values(ascending=False).cumsum()    origin = row.to_dict() #原始每个用户值    if df[0]>0.8:        new_df = df[:1]    else:        new_df = df[df<=0.8]    name = new_df.name  #user    tmp = new_df.to_dict()    for key in tmp.keys(): # 原始值映射        tmp[key] = origin[key]    tmp['user'] = name    sum_df.append(tmp)sum_df = pd.DataFrame(sum_df).set_index('user').fillna(0)print(sum_df)

python pandas怎么遍历每行并累加进行条件过滤

通过字典映射效率很高,新测有效!

python DataFrame遍历

在数据分析的过程中,往往需要用到DataFrame的类型,因为这个类型就像EXCEL表格一样,便于我们个中连接、计算、统计等操作。在数据分析的过程中,避免不了的要对数据进行遍历,那么,DataFrame如何遍历呢?之前,小白每次使用时都是Google或百度,想想,还是总结一下~

小白经常用到的有三种方式,如下:

首先,先读入一个DataFrame

import pandas as pd#读入数据df = pd.read_table('d:/Users/chen_lib/Desktop/tmp.csv',sep=',', header='infer')df.head() -----------------result------------------        mas  effectdate     num0    371379    2019-07-15    3611    344985    2019-07-13    772    425090    2019-07-01    1053    344983    2019-02-19    3394    432430    2019-02-21    162

1.DataFrame.iterrows()       

将DataFrame的每一行迭代为{索引,Series}对,对DataFrame的列,用row['cols']读取元素

for index, row in df.iterrows():    print(index,row['mas'],row['num'])    ------------result---------------0 371379 3611 344985 772 425090 1053 344983 3394 432430 162

从结果可以看出,第一列就是对应的index,也就是索引,从0开始,第二第三列是自定义输出的列,这样就完成了对DataFrame的遍历。

2.DataFrame.itertuples()

将DataFrame的每一行迭代为元祖,可以通过row['cols']对元素进行访问,方法一效率高。

for row in df.itertuples():    print(getattr(row, 'mas'), getattr(row, 'num')) # 输出每一行  -------------result-----------------371379 361344985 77425090 105344983 339432430 162

从结果可以看出,这种方法是没有index的,直接输出每一行的结果。

3.DataFrame.iteritems()

这种方法和上面两种不同,这个是按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row['cols']对元素进行访问。

for index, row in df.iteritems():    print(index,row[0],row[1],row[2])  -------------result------------------masterhotelid 371379 344985 425090effectdate 2019-07-15 2019-07-13 2019-07-01quantity 361 77 105

从结果可以看出,index输出的是列名,row是用来读取第几行的数据,结果是按列展示 

以上就是“python pandas怎么遍历每行并累加进行条件过滤”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯