# yyds干货盘点 # 使用Pandas完成data列数据处理,按照数据列中元素出现的先后顺序进行分组排列

网友投稿 270 2022-08-31


# yyds干货盘点 # 使用Pandas完成data列数据处理,按照数据列中元素出现的先后顺序进行分组排列

大家好,我是皮皮。

一、前言

前几天在Python钻石交流群【瑜亮老师】给大家出了一道​​Pandas​​数据处理题目,使用​​Pandas​​完成下面的数据操作:把data列中的元素,按照它们出现的先后顺序进行分组排列,结果如new列中展示。df打印结果展示如下:。

下面是原始内容。

import pandas as pddf = pd.DataFrame({ 'data': ['A1', 'D3', 'B2', 'C4', 'A1', 'A2', 'B2', 'B3', 'C3', 'C4', 'D5', 'D3'], 'new': ['A1', 'A1', 'D3', 'D3', 'B2', 'B2', 'C4', 'C4', 'A2', 'B3', 'C3', 'D5']})print(df)print(df)

结果如下图所示:

二、实现过程

方法一

这里【猫药师Kelly】给出了一个解答,代码和结果如下图所示。

方法二

【瑜亮老师】自己也给出了一个答案,代码如下图所示:

df['newnew'] = sum([[k]*v for k, v in Counter(df['data']).items()], [])

方法三

【瑜亮老师】从其他群分享了一份代码,代码如下图所示:

import pandas as pdfrom collections import Counterfrom itertools import chaindf = pd.DataFrame({ 'data': ['A1', 'D3', 'B2', 'C4', 'A1', 'A2', 'B2', 'B3', 'C3', 'C4', 'D5', 'D3'], 'new': ['A1', 'A1', 'D3', 'D3', 'B2', 'B2', 'C4', 'C4', 'A2', 'B3', 'C3', 'D5']})print(df)df['newnew'] = [*chain(*([k]*v for k, v in Counter(df['data']).items()))]print(df)

方法四

这里【月神】给出了三个方法,下面展示的这个方法和上面两个方法的思路是一样的,代码如下图所示:

import pandas as pddf = pd.DataFrame({ 'data': ['A1', 'D3', 'B2', 'C4', 'A1', 'A2', 'B2', 'B3', 'C3', 'C4', 'D5', 'D3'], 'new': ['A1', 'A1', 'D3', 'D3', 'B2', 'B2', 'C4', 'C4', 'A2', 'B3', 'C3', 'D5']})print(df)df['new2'] = df['data'].unique().repeat(df['data'].value_counts(sort=False))print(df)

运行之后,结果如下图所示:

方法五

后来【月神】还补充了一个方法,代码如下图所示:

import pandas as pddf = pd.DataFrame({ 'data': ['A1', 'D3', 'B2', 'C4', 'A1', 'A2', 'B2', 'B3', 'C3', 'C4', 'D5', 'D3'], 'new': ['A1', 'A1', 'D3', 'D3', 'B2', 'B2', 'C4', 'C4', 'A2', 'B3', 'C3', 'D5']})print(df)df['new3'] = df['data'].astype('category').cat.reorder_categories(df['data'].unique()).sort_values().valuesprint(df)

运行之后,结果如下图所示:

方法六

后来【月神】还补充了第三个方法,代码如下图所示:

import pandas as pddf = pd.DataFrame({ 'data': ['A1', 'D3', 'B2', 'C4', 'A1', 'A2', 'B2', 'B3', 'C3', 'C4', 'D5', 'D3'], 'new': ['A1', 'A1', 'D3', 'D3', 'B2', 'B2', 'C4', 'C4', 'A2', 'B3', 'C3', 'D5']})print(df)df['new4'] = sorted(df['data'].tolist(), key=df['data'].tolist().index)print(df)

运行之后,结果如下图所示:

这个方法还是有点难以理解的,【月神】这里补充了下。

八仙过海,神仙操作,简直太强了!

三、总结

大家好,我是皮皮。这篇文章主要盘点了使用​​Pandas​​完成data列数据处理,按照数据列中元素出现的先后顺序进行分组排列的问题,文中针对该问题给出了具体的解析和代码演示,一共6个方法,欢迎一起学习交流,我相信还有其他方法,如果你有的话,记得来我交流群分享噢!

【月神】和【瑜亮老师】太强了,这个里边东西还是很多的,可以学习很多。

最后感谢【瑜亮老师】出题,感谢【瑜亮老师】、【猫药师Kelly】、【月神】给出的代码和具体解析,感谢【dcpeng】等人参与学习交流。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:(干货)写爬虫的你一定有类似经历
下一篇:java如何实现数位分离
相关文章

 发表评论

暂时没有评论,来抢沙发吧~