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

2c1f108c76dd52f6fcaa9ac84a66d2e2.png

一、前言

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

90c040d94b5440b66f75e70cd5b9a84b.png

下面是原始内容。

import pandas as pd
df = 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)
# 请补充你的代码。new列为data列分组排序后的结果
print(df)

结果如下图所示:

a59fcc32c9810a0b424d6ac0eb737db1.png

二、实现过程

方法一

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

315bc23dbeecf27e1eb49d67ecbf3ffb.png

方法二

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

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

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

方法三

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

import pandas as pd
from collections import Counter
from itertools import chain
df = 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)

运行之后,结果如下图所示:1ed384ced8f1e5288c5e238c06444505.png

方法四

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

import pandas as pd

df = 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)

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

e6857ebb85d0454e03e9a14801e744bb.png

方法五

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

import pandas as pd

df = 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().values
print(df)

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

f718ef6dd8bb8240e74fc4d6c4592b31.png

方法六

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

import pandas as pd

df = 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)

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

2b89a95ceb0a0c6d9c7f3afe9764aa35.png

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

f89f3f48b002788f7c00e5a12a3b5412.png

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

三、总结

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

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

54555b658abf814b3cac08bb7785b71b.png

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

小伙伴们,快快用实践一下吧!

END

推荐阅读



牛逼!Python常用数据类型的基本操作(长文系列第①篇)
牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)

吴恩达deeplearining.ai的经典总结资料
Ps:从小程序直接获取下载
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值