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

目录
  • pandas遍历每行并累加进行条件过滤
  • python DataFrame遍历
    • 1.DataFrame.iterrows()
    • 2.DataFrame.itertuples()
    • 3.DataFrame.iteritems()

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())*1
print(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     num
0    371379    2019-07-15    361
1    344985    2019-07-13    77
2    425090    2019-07-01    105
3    344983    2019-02-19    339
4    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 361
1 344985 77
2 425090 105
3 344983 339
4 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 361
344985 77
425090 105
344983 339
432430 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 425090
effectdate 2019-07-15 2019-07-13 2019-07-01
quantity 361 77 105

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python Pandas条件筛选功能

    目录 一.准备数据 二.以>,<,==,>=,<=来进行选择 三..isin() 四..str.contains()实现 一.准备数据 import pandas as pd   data = pd.read_excel(r'销售数据.xlsx') print(data) 数据如下: 二.以>,<,==,>=,<=来进行选择 “等于”一定是用‘==’,如果用‘=’就不是判断大小了: 例如:筛选销售员是马姐的数据 df = data[data['销售员'] =

  • Pandas的数据过滤实现

    作者|Amanda Iglesias Moreno 编译|VK 来源|Towards Datas Science 从数据帧中过滤数据是清理数据时最常见的操作之一.Pandas提供了一系列根据行和列的位置和标签选择数据的方法.此外,Pandas还允许你根据列类型获取数据子集,并使用布尔索引筛选行. 在本文中,我们将介绍从Pandas数据框中选择数据子集的最常见操作: 按标签选择单列 按标签选择多列 按数据类型选择列 按标签选择一行 按标签选择多行 按位置选择一行 按位置选择多行 同时选择行和列 选

  • Python遍历pandas数据方法总结

    前言 Pandas是python的一个数据分析包,提供了大量的快速便捷处理数据的函数和方法.其中Pandas定义了Series 和 DataFrame两种数据类型,这使数据操作变得更简单.Series 是一种一维的数据结构,类似于将列表数据值与索引值相结合.DataFrame 是一种二维的数据结构,接近于电子表格或者mysql数据库的形式. 在数据分析中不可避免的涉及到对数据的遍历查询和处理,比如我们需要将dataframe两列数据两两相除,并将结果存储于一个新的列表中.本文通过该例程介绍对pa

  • python pandas遍历每行并累加进行条件过滤方式

    目录 pandas遍历每行并累加进行条件过滤 python DataFrame遍历 1.DataFrame.iterrows() 2.DataFrame.itertuples() 3.DataFrame.iteritems() pandas遍历每行并累加进行条件过滤 本次记录主要实现对每行进行排序,并保留前80%以前的偏好. 思路: 将每行的概率进行排序,然后累加,累加值小于等于0.8的偏好保留,获得一个累加过滤的dataframe,然后映射回原始数据中,保留每行的偏好.接下来是代码的实现 a

  • Python Pandas 对列/行进行选择,增加,删除操作

    一.列操作 1.1 选择列 d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) print (df ['one']) # 选择其中一列进行显示,列长度为最长列的长度 # 除了 index 和 数据,还会显示 列表头名,和 数据 类型 运行结果: a    1.0 b   

  • Python pandas删除指定行/列数据的方法实例

    目录 1.滤除缺失数据dropna() 1)滤除含有NaN值的所有行 2)滤除含有NaN值的所有列 3)滤除元素都是NaN值的行 4)滤除元素都是NaN值的列 5)滤除指定列中含有缺失的行 2.删除重复值 drop_duplicates() 1)keep=“first” 2)keep=“last” 3)keep=False 4)删除指定列中重复项对应的行 3.根据指定条件删除行列drop() 1).删除指定列 2).删除指定行 总结 1.滤除缺失数据dropna() import pandas

  • Python pandas 计算每行的增长率与累计增长率

    读取数据: FacebookDf=pd.read_excel(r'D:\jupyter\Untitled Folder\Facebook2017年股票数据.xlsx',index_col='Date') FacebookDf.tail() 计算当前行比上一行增长的百分比(每行的增长率) # .pct_change()返回变化百分比,第一行因没有可对比的,返回Nan,填充为0 # apply(lambda x: format(x, '.2%'))将小数点转换为百分数 FacebookDf['pct

  • python 递归遍历文件夹,并打印满足条件的文件路径实例

    题目:利用协程来遍历目录下,所有子文件及子文件夹下的文件是否含有某个字段值,并打印满足条件的文件的绝对路径. #!/user/bin/env python # -*- coding:utf-8 -*- #grep -rl "python" D:\devtools\workspace\python\aaa import os def init(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) res.send(Non

  • python pandas库读取excel/csv中指定行或列数据

    目录 引言 1.根据index查询 2.已知数据在第几行找到想要的数据 3.根据条件查询找到指定行数据 4.找出指定列 5.找出指定的行和指定的列 6.在规定范围内找出符合条件的数据 总结 引言 关键!!!!使用loc函数来查找. 话不多说,直接演示: 有以下名为try.xlsx表: 1.根据index查询 条件:首先导入的数据必须的有index 或者自己添加吧,方法简单,读取excel文件时直接加index_col 代码示例: import pandas as pd #导入pandas库 ex

  • python pandas数据处理之删除特定行与列

    目录 dropna() 方法过滤任何含有缺失值的行 方法一:dropna() 其他参数解析 方法二:替换并删除,Python pandas 如果某列值为空,过滤删除所在行数据 总结 dropna() 方法过滤任何含有缺失值的行 pandas.DataFrame里,如果一行数据有任意值为空,则过滤掉整行,这时候使用dropna()方法是合适的.下面的案例,任意列只要有一个为空数据,则整行都干掉.但是我们常常遇到的情况,是根据一个指标(一列)数据的情况,去过滤行数据,类似Excel里面的过滤漏斗,怎

  • Python pandas按行、按列遍历DataFrame的几种方式

    目录 前言 一.按行遍历 1. 使用loc或iloc方法 2. 使用iterrows()方法 二.按列遍历 1. 使用列索引方式 2. 使用iteritems()方法 补充:遍历dataframe每一行的每一个元素 总结 前言 在对DataFrame数据进行处理时,存在需要对数据内容进行遍历的场景.因此记录一下按照行,列遍历的几种方式. 一.按行遍历 1. 使用loc或iloc方法 loc:表示location,填写内容为行的值或者列表,若填写内容为值,则返回对应行的内容(Series类型):若

  • 对Python中DataFrame按照行遍历的方法

    在做分类模型时候,需要在DataFrame中按照行获取数据以便于进行训练和测试. import pandas as pd dict=[[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9],[5,6,7,8,9,10]] data=pd.DataFrame(dict) print(data) for indexs in data.index: print(data.loc[indexs].values[0:-1]) 实验结果: /usr/b

  • python中pandas.DataFrame对行与列求和及添加新行与列示例

    本文介绍的是python中pandas.DataFrame对行与列求和及添加新行与列的相关资料,下面话不多说,来看看详细的介绍吧. 方法如下: 导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFrame(np.random.randn(4, 5), columns=['A', 'B', 'C', 'D', 'E']) DataFrame数据预览: A

随机推荐