看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本需求为,先对数据用 groupby 进行分组,分组后,组内某列如果有重复值,则将重复的数据行删除。
我们构造数据如下:
import pandas as pd
df = pd.DataFrame({
'x':list('aaabbb'),
'y':list('113556'),
'z':list('324562'),
})
df
'''
x y z
0 a 1 3
1 a 1 2
2 a 3 4
3 b 5 5
4 b 5 6
5 b 6 2
'''
上述数据中,按 x 列可分为 a b 两组,在 a 组中 y 列有两行 1 值,需要删除只保留一行,在 b 组中 y 列有两行重复 5 值,需要删除只保留一行。
以下为代码思路:
我们先观察一下各组不重复的值:
df.groupby('x').y.unique()
'''
x
a [1, 3]
b [5, 6]
Name: y, dtype: object
'''
以上代码是按 x 分组,产生了 a b 两个子 DataFrame,然后取它们的 y 列的 子 Series 分组,unique 取它们的不重复值的列表。
接下来是我们按思路的解决代码:
(
df.groupby('x')
.apply(lambda x: x.drop_duplicates('y'))
)
'''
x y z
x
a 0 a 1 3
2 a 3 4
b 3 b 5 5
5 b 6 2
'''
其实,直接使用 drop_duplicates()
就可以完成:
df.drop_duplicates(['x', 'y'])
这样就实现了需求。
(完)
更新时间:2024-08-18 15:40:28 标签:pandas python groupby 分组 重复