You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于字符串中的数值,使用groupby对Pandas DataFrame分组?

基于字符串中的数值对DataFrame分组的解决方案

方法1:正则提取分组键并分组

先从目标列中提取用于分组的整数部分,再进行分组操作:

import pandas as pd

df = pd.DataFrame({'x':['ab_c_1.0','ab_c_1.1','ab_c_12.0','ab_c_12.1','ab_c_123.0','ab_c_123.1']})

# 提取最后下划线后小数点前的整数作为分组键
group_keys = df['x'].str.extract(r'_(\d+)\.\d+', expand=False)
# 按提取的键分组
groups = df.groupby(group_keys)

# 输出分组结果
for key, group in groups:
    print(f"分组 {key}:")
    print(group)
    print()

方法2:字符串分割获取分组键

无需正则,通过字符串分割也能实现:

# 先按下划线分割取最后一段,再按小数点分割取整数部分
group_keys = df['x'].str.split('_').str[-1].str.split('.').str[0]
groups = df.groupby(group_keys)

for key, group in groups:
    print(f"分组 {key}:")
    print(group)
    print()

直接在groupby中嵌入提取逻辑(无额外列)

如果不想生成中间列,可以直接把提取逻辑传入groupby:

groups = df.groupby(df['x'].str.extract(r'_(\d+)\.\d+', expand=False))

for key, group in groups:
    print(f"分组 {key}:")
    print(group)
    print()

运行后都会得到你期望的结果:

分组 1:
          x
0  ab_c_1.0
1  ab_c_1.1

分组 12:
           x
2  ab_c_12.0
3  ab_c_12.1

分组 123:
            x
4  ab_c_123.0
5  ab_c_123.1

原正则不生效的原因

你用的(\w+)_\w+中,\w仅匹配字母、数字和下划线,不包含小数点。所以对于ab_c_1.0这类字符串,它只能匹配到ab_c_1,无法正确提取出用于分组的完整数字标识。调整后的正则_(\d+)\.\d+专门匹配最后下划线后的数字格式,能精准提取分组所需的整数键。

内容的提问来源于stack exchange,提问作者doine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:05:26