千家信息网

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

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,今天小编给大家分享一下python pandas怎么遍历每行并累加进行条件过滤的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文
千家信息网最后更新 2025年01月21日python pandas怎么遍历每行并累加进行条件过滤

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

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)

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

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

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

本节内容目标明确,实现了每个用户的前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 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怎么遍历每行并累加进行条件过滤"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

数据 偏好 结果 原始 一行 知识 篇文章 输出 条件 接下来 代码 元素 内容 效率 方法 用户 类型 不同 可以通过 字典 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发游戏方向 计算机网络技术和支付宝 地瓜网络技术钉钉直播下载器下载 徐州数字化智慧工地软件开发 svn服务器 客户端 我身边的网络安全 扬州多点控制视频系统服务器 使用某一数据库系统可以实现 vscode有数据库 米孚软件开发 从软件开发的角度 游戏老是连接服务器超时怎么回事 狭义上的网络安全 全球软件开发大会是什么意思 电脑上不了网 代理服务器有问题 杭州服装进销存软件开发 区块链数据库 医疗行业 国企省级银行软件开发岗怎么样 网络安全与信息化期刊 暗黑2 连接服务器失败 网络安全法心得大学 系统管理员限制远端服务器 如何设置网络文字数据库 bash 数据库 combox取消绑定数据库 如何评价一个软件开发成功 布鲁金斯学会 中美网络安全 如何0基础学好实用网络技术基础 软件开发好怎么上应用市场 网络安全程序员的未来
0