更新:后来忽然发现有个cumcount()函数,支持正排倒排,所以以下说的那些基本都没啥用了。

最近做比赛线上无甚进展,所以先小小地总结遇到的一些困难和解决的方法,以防之后忘记。毕竟总是忙着大步赶路的话,容易扯着蛋。在此感谢群内大佬们的指导,给了我思路和解决方案。

数据处理的话一般pandas是用到最多的啦,这次我遇到了这样的问题,比如我有个DataFrame如下:

首先我想统计一下A、B、C分别出现了几次,并且作为一列写在旁边,但我又不想groupby再count再merge什么的,有没有什么简单的方法?

有的,np.unique,我们先来看看这个函数是什么效果:

诶哟,不就是个查看唯一性的函数吗……,但这个函数有个参数return_counts:

是不是有点Counter的意思了?

我们把这两列zip一下,再转成字典不就是解决方法了吗?

def a_count(df):
count_dic=dict(zip(*np.unique(df['什么玩意儿'],return_counts=True)))
return df['什么玩意儿'].apply(lambda x:count_dic[x])

可以看到每个A边上都写了A出现了3次,B、C亦如是,第一个目标完成了~

进一步说,如果你想知道列内某个元素是否唯一的话(B唯一,A、C不唯一),只要再加上

df[df['计数']>1]=0

就好了。

接下来,我想实现的是A第一次出现时边上显示1,第二次显示2,以此类推。这里我就直接写函数了:

def a_rank(x):
b=x.reset_index() #把索引变成1、2、3、4、5……这样
b['index']=b.index #加出一列记录索引
b=b.groupby(['什么玩意儿'])['index'].rank() #按照“什么玩意儿”分组之后得到记录索引列的排序
b.index=x.index #多加了一步,变回原来的索引
return b.astype(np.uint8) #原返回值为float64

结果如图:

这种可以用于分别记录若干个用户第几次访问的事件,如果我要记录倒数第几次访问的话也很简单,把函数第3句改动一下就好了:

b=b.groupby(['什么玩意儿'])['index'].rank(ascending=False) #默认ascending=True,即升序,改为False即为降序

另外说一下为什么要多加一句

b.index=x.index

这是由于实际应用中我的df是从一个更大的DataFrame中抽样出来的,其索引并不连续,在没加这句之前,我发现排序的结果中出现了很多nan,仔细研究一下之后发现必须对齐索引,所以加入了这一句作为保障。

以上~

pandas技巧两则——列内元素统计和列内元素排序的更多相关文章

  1. html元素两种分类。替换元素和不可替换元素;块级元素和行内元素

    根据元素本身特点来分类: 替换元素替换元素根据其标签和属性来决定元素的具体显示内容.有<img><input><textarea><select>< ...

  2. Java ArrayList使用技巧 - 两个ArrayList去除重复的元素

    方法一.ArrayList中提供的removeAll方法(效率最低) List1.removeAll(mSubList); 方法二.双重循环(比方法一效率高) 双重循环分为内外两层循环,经过测试,将元 ...

  3. 数据处理:12个使得效率倍增的pandas技巧

    数据处理:12个使得效率倍增的pandas技巧 1. 背景描述 Python正迅速成为数据科学家偏爱的语言,这合情合理.它拥有作为一种编程语言广阔的生态环境以及众多优秀的科学计算库.如果你刚开始学习P ...

  4. CSS样式设置语法全解,样式优先级、值和单位、字体、文本、块级元素,行内元素,替换元素、非替换元素、display、float、position、table、li、光标、边距边框、轮廓、颜色背景

    全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css选择器全解 css操作语法全解 CSS样式设置语法全解: 样式优先级 1. !important标记的样式 > 内联样式(sty ...

  5. python 全栈开发,Day48(标准文档流,块级元素和行内元素,浮动,margin的用法,文本属性和字体属性)

    昨日内容回顾 高级选择器: 后代选择 : div p 子代选择器 : div>p 并集选择器: div,p 交集选择器: div.active 属性选择器: [属性~='属性值'] 伪类选择器 ...

  6. {03--CSS布局设置} 盒模型 二 padding bode margin 标准文档流 块级元素和行内元素 浮动 margin的用法 文本属性和字体属性 超链接导航栏 background 定位 z-index

    03--CSS布局设置 本节目录 一 盒模型 二 padding(内边距) 三 boder(边框) 四 简单认识一下margin(外边距) 五 标准文档流 六 块级元素和行内元素 七 浮动 八 mar ...

  7. padding(内边框), border(边框), margin, 标准文档流, 块级元素和行内元素, 浮动 ,margin的用法

    盒模型 在CSS中,"box model"这一术语是用来设计和布局时使用,然后在网页中基本上都会显示一些方方正正的盒子.我们称为这种盒子叫盒模型. 盒模型有两种:标准模型和IE模型 ...

  8. CSS常用布局方式-两列布局、三列布局

    CSS基础 2.几种布局方式1)table布局 当年主流的布局方式,第一种是通过table tr td布局 示例: <style type="text/css"> ta ...

  9. 如何用快排思想在O(n)内查找第K大元素--极客时间王争《数据结构和算法之美》

    前言 半年前在极客时间订阅了王争的<数据结构和算法之美>,现在决定认真去看看.看到如何用快排思想在O(n)内查找第K大元素这一章节时发现王争对归并和快排的理解非常透彻,讲得也非常好,所以想 ...

随机推荐

  1. 服务器三:多线程epoll

    #include <fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <ar ...

  2. ext前后台数据传输的标准化

    一.标准化的数据传输是什么 这里所说的标准化主要是指,使用代理提交数据时,格式必须统一化.标准化,而服务器返回的数据格式也必须是标准化的数据. 简言之,使用代理提交数据时,前台--->后台,后台 ...

  3. .Net Core 在Linux服务器下部署程序--(3). 部署.net Core程序

    确认第二步中的软件已安装完成 lrzsz文件上传下载软件 zip与unzip压缩包软件 net core 相关软件 确认上述软件安装完成之后,开始部署程序 创建部署文件夹 我的习惯是在usr文件夹下新 ...

  4. butterknife使用

    butterknife是一个轻量级的DI框架,官网地址:http://jakewharton.github.io/butterknife/ 注意事项:使用前需要对编辑器进行相关设置,详见官网说明. 以 ...

  5. 迁移FRS至DFSR SYSVOL

    截至2017年6月20日,Windows 2016 RS1系统为最后一版支持FRS,后续版本将不再包含该功能,详细见 https://support.microsoft.com/en-us/help/ ...

  6. c++字节对齐编译器指令#pragma

    第一种 #pragma pack(push, 1) // 先把当前对齐设置压栈,再设置为1字节对齐 struct S { char a; ]; }; #pragma pack(pop) // 恢复先前 ...

  7. Codeforces Round #539 (Div. 2) - C. Sasha and a Bit of Relax(思维题)

    Problem   Codeforces Round #539 (Div. 2) - C. Sasha and a Bit of Relax Time Limit: 2000 mSec Problem ...

  8. RecyclerView的Item的单击事件

    RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下: ...

  9. git 添加、提交、推送

    只添加本地修改的一个文件 如,只添加package.json一个文件 git add package.json git commit -m "修改qa环境版本号" git push ...

  10. pytorch中文文档-torch.nn常用函数-待添加-明天继续

    https://pytorch.org/docs/stable/nn.html 1)卷积层 class torch.nn.Conv2d(in_channels, out_channels, kerne ...