从数据帧拆分行值和计数唯一值

2024-09-26 18:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在标题为《参考》的专栏中有以下数据:

ABS052
ABS052/01
ABS052/02
ADA010/00
ADD005
ADD005/01
ADD005/02
ADD005/03
ADD005/04
ADD005/05
...
WOO032
WOO032/01
WOO032/02
WOO032/03
WOO045
WOO045/01
WOO045/02
WOO045/03
WOO045/04

我想知道如何拆分行值以创建包含单个引用代码和计数值的数据帧,例如:

^{tb1}$

我有以下代码: df['Reference'] = df['Reference'].str.split('/')

结果:

['ABS052'],
['ABS052','01'],
['ABS052','02'],
['ABS052','03'],
...

但我不知道如何从每一行的列表中去掉最后两位数字

我现在只想在每一行中保留字符串[0]。如果这有意义,那么我可以从'Reference'列中检索一个value_count


Tags: 数据代码标题df数值referencestr专栏
3条回答

您可以使用正则表达式替换最后两位数字,如下所示:

df = pd.DataFrame({'a':['ABS052','ABS052/01','ABS052/02','ADA010/00','ADD005','ADD005/01','ADD005/02','ADD005/03','ADD005/04','ADD005/05']})
df = df['a'].str.replace(r'\/\d+$', '').value_counts().reset_index()

输出:

>>>>    index   a
    0   ADD005  6
    1   ABS052  3
    2   ADA010  1

就快到了,您可以将expand=True添加到split,然后使用groupby

df['Reference'].str.split("/", expand=True).fillna("--").groupby(0).count()

返回:

        1
0        
ABS052  3
ADA010  1
ADD005  6

对于数据的前几行

fillna("--")确保您还可以计算像ABS052这样没有“”的行,即第二列中的None

问题中列出的预期结果似乎有问题

假设您要舍弃数字并计算前缀出现的次数:

df.Reference.str.split("/", expand=True)[0].value_counts()

相反,如果后缀表示某事,并且您希望保持最高值,则应该这样做

df.Reference.str.split("/", expand=True).fillna("00").astype({0: str, 1: int}).groupby(0).max()

相关问题 更多 >

    热门问题