点击上方“Python共享之家”,进行关注
回复“资源”即可获赠Python学习资料
今
日
鸡
汤
落叶人何在,寒云路几层。
大家好,我是皮皮。
一、前言
前几天在Python钻石交流群【瑜亮老师】给大家出了一道Pandas
数据处理题目,使用Pandas
完成下面的数据操作:把data列中的元素,按照它们出现的先后顺序进行分组排列,结果如new列中展示。df打印结果展示如下:。
![9ef5e5908fd81f3c98b882b1a331194d.png](https://i-blog.csdnimg.cn/blog_migrate/977e96c497e4771bb1a2ca6f9602f26c.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)
结果如下图所示:
![fe9526695dbcff2edf55645f5560a901.png](https://i-blog.csdnimg.cn/blog_migrate/7013381ca206ab07e38503de4b0b1177.png)
二、实现过程
方法一
这里【猫药师Kelly】给出了一个解答,代码和结果如下图所示。
![272ecc3514d563fced8024dcb5d8937c.png](https://i-blog.csdnimg.cn/blog_migrate/f1777b6c90ee6b1da50185c109621fc9.png)
方法二
【瑜亮老师】自己也给出了一个答案,代码如下图所示:
df['newnew'] = sum([[k]*v for k, v in Counter(df['data']).items()], [])
运行之后,结果如下图所示:
方法三
【瑜亮老师】从其他群分享了一份代码,代码如下图所示:
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)
运行之后,结果如下图所示:
方法四
这里【月神】给出了三个方法,下面展示的这个方法和上面两个方法的思路是一样的,代码如下图所示:
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)
运行之后,结果如下图所示:
![522311c9d1d325eff238103efed89954.png](https://i-blog.csdnimg.cn/blog_migrate/04c67bfad6eb9e1618dc594adb564988.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)
运行之后,结果如下图所示:
![4918868cb7fd7f8d0d8d4023e4eb9ee0.png](https://i-blog.csdnimg.cn/blog_migrate/9962f0660216abfe79081a28cc1828df.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)
运行之后,结果如下图所示:
![051ed4e942ee7495bf05f423730da484.png](https://i-blog.csdnimg.cn/blog_migrate/73e5c563707b533f1b30b6b0e1f47023.png)
这个方法还是有点难以理解的,【月神】这里补充了下。
![5e4cfdf0332caad39182f7d1b96d1c50.png](https://i-blog.csdnimg.cn/blog_migrate/2faea4d72d749fa4fdddd2fcd2aa1f83.png)
八仙过海,神仙操作,简直太强了!
三、总结
大家好,我是皮皮。这篇文章主要盘点了使用Pandas
完成data列数据处理,按照数据列中元素出现的先后顺序进行分组排列的问题,文中针对该问题给出了具体的解析和代码演示,一共6个方法,欢迎一起学习交流,我相信还有其他方法,如果你有的话,记得来我交流群分享噢!
【月神】和【瑜亮老师】太强了,这个里边东西还是很多的,可以学习很多。
![e65d73a36a141b1108b3cf0138c03ff4.png](https://i-blog.csdnimg.cn/blog_migrate/ce347ecc39af159499e5b70b62b7b8b3.png)
最后感谢【瑜亮老师】出题,感谢【瑜亮老师】、【猫药师Kelly】、【月神】给出的代码和具体解析,感谢【dcpeng】等人参与学习交流。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
------------------- End -------------------
往期精彩文章推荐:
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行