Pandas Dataframe 在列字符串的子集中重复

djmepvbi  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(132)

我有一个Pandas Dataframe ,有两列id和user_name。
其中,ID列具有以下格式(xxxxxx-xxx-A):r '[0-9]{6}-[0-9]{3}$'+字母表中的字母。
下面是我的 Dataframe 示例:

id  user name
095082-000-A    name1
095772-101-A    name2
095082-000-B    name3
095772-101-E    name4
095772-101-Z    name5
095772-101-D    name6
095082-000-F    name7
015082-001-A    name8

预期的结果是只保留ID与“xxxxxx-xxx-”部分不重复且最后一个(按顺序)字母为:

id  user name
095772-101-Z    name5
095082-000-F    name7
015082-001-A    name8

什么是最有效的方法呢?谢谢

3npbholx

3npbholx1#

您可以将字符串拆分为公共标识符和字母,然后按所需的优先级对值进行排序,最后获得每组的最后一个索引:

idx = (df['id']
 .str.extract(r'([0-9]{6}-[0-9]{3})-(.*)')
 .sort_values(by=1)
 .reset_index()
 .groupby(0, sort=False)['index'].last()
)

out = df.loc[idx]

输出功率

id user_name
0  095082-000-P     name1
4  095772-101-Z     name5
7  015082-001-P     name8

相关问题