Polars中分组上下文下的数据插值:处理缺失值的完整指南

Polars中分组上下文下的数据插值:处理缺失值的完整指南

本文详细介绍了在Polars中如何优雅地解决分组(groupby)上下文下的数据插值问题。当需要在每个分组内填充按特定步长递增的缺失序列值时,直接插值难以实现。核心策略是首先为每个分组生成一个完整的、包含所有预期步长值的序列,然后通过左连接将原始数据与此扩展序列合并,最后利用Polars的interpolate()方法对目标列进行插值,从而实现高效且精确的数据填充。

引言

在数据分析中,我们经常会遇到时间序列或有序数据中存在缺失值的情况。polars作为一款高性能的数据处理库,提供了强大的插值功能。然而,当需要在分组(groupby)的上下文中进行插值,并且插值目标不仅仅是填充现有缺失值,而是要补齐分组内按特定步长缺失的整个序列时,常规的groupby().agg(pl.col(“y”).interpolate())方法可能无法满足需求。例如,如果希望在每个分组内,x列的值以固定步长(如5)连续递增,而原始数据中这些中间值可能完全缺失,我们需要一种方法来“创造”这些缺失的x值及其对应的插值y值。

本文将深入探讨如何在Polars中实现这种复杂的分组内序列填充与插值,尤其适用于处理大规模数据集。

问题场景描述

假设我们有一个Polars DataFrame,包含三列:x(整数,可能存在缺失的步长连续值)、y(整数,与x相关)和z(字符串,类别列)。我们的目标是:

按z列进行分组。在每个z组内,确保x列的值是连续的,并且以固定的步长(例如5)递增,从该组的x最小值到最大值。对于新生成的或原始数据中x值对应的y值,如果缺失,则进行线性插值。

以下是示例数据:

import polars as pl# 原始DataFramedata = {    "x": [5, 10, 20, 25, 10, 20, 30],    "y": [1, 2, 4, 5, 2, 4, 6],    "z": ["A", "A", "A", "A", "B", "B", "B"]}df = pl.DataFrame(data)print("原始DataFrame:")print(df)

输出:

原始DataFrame:shape: (7, 3)┌─────┬─────┬─────┐│ x   ┆ y   ┆ z   ││ --- ┆ --- ┆ --- ││ i64 ┆ i64 ┆ str │╞═════╪═════╪═════╡│ 5   ┆ 1   ┆ A   ││ 10  ┆ 2   ┆ A   ││ 20  ┆ 4   ┆ A   ││ 25  ┆ 5   ┆ A   ││ 10  ┆ 2   ┆ B   ││ 20  ┆ 4   ┆ B   ││ 30  ┆ 6   ┆ B   │└─────┴─────┴─────┘

我们期望的输出是这样的,其中x值在每个z组内以步长5填充,并且y值也相应插值:

shape: (10, 3)┌─────┬─────┬─────┐│ x   ┆ y   ┆ z   ││ --- ┆ --- ┆ --- ││ i64 ┆ i64 ┆ str │╞═════╪═════╪═════╡│ 5   ┆ 1   ┆ A   ││ 10  ┆ 2   ┆ A   ││ 15  ┆ 3   ┆ A   │  <- 填充和插值│ 20  ┆ 4   ┆ A   ││ 25  ┆ 5   ┆ A   ││ 10  ┆ 2   ┆ B   ││ 15  ┆ 3   ┆ B   │  <- 填充和插值│ 20  ┆ 4   ┆ B   ││ 25  ┆ 5   ┆ B   │  <- 填充和插值│ 30  ┆ 6   ┆ B   │└─────┴─────┴─────┘

解决方案:生成完整序列与左连接插值

解决此问题的核心思路是:

为每个分组生成完整的x值序列:根据每个分组的x最小值和最大值,以及预设的步长,生成该分组内所有可能x值的完整序列。创建扩展的DataFrame:将所有分组生成的完整x序列组合成一个临时的DataFrame,其中包含z和所有预期的x值。执行左连接:将这个扩展的DataFrame与原始DataFrame进行左连接,连接键是z和x。这将导致那些在原始数据中缺失的x值在合并后的DataFrame中对应y值为null。应用插值:对连接后生成的DataFrame中的y列应用interpolate()方法,填充所有null值。

步骤一:生成每个分组的完整x值序列

首先,我们需要为每个z分组生成其对应的完整x值范围。这可以通过group_by结合agg和pl.int_range实现。pl.int_range(start, end, step)可以生成一个整数序列。

# 步骤一:为每个分组生成所有预期的x值# 使用group_by("z")按类别分组# 使用agg聚合操作,对每个组:#   pl.col("x").min() 获取当前组x的最小值#   pl.col("x").max() 获取当前组x的最大值#   pl.int_range() 生成从最小值到最大值(包含)的步长为5的整数序列#   .alias("x") 将生成的序列命名为"x"# explode("x") 将列表形式的"x"列展开成多行,每行对应一个x值upsampled_df = (    df    .group_by("z")    .agg(        pl.int_range(pl.col("x").min(), pl.col("x").max() + 5, step=5).alias("x")    )    .explode("x"))print("n生成完整x值序列的DataFrame (upsampled_df):")print(upsampled_df)

输出:

生成完整x值序列的DataFrame (upsampled_df):shape: (10, 2)┌─────┬─────┐│ z   ┆ x   ││ --- ┆ --- ││ str ┆ i64 │╞═════╪═════╡│ A   ┆ 5   ││ A   ┆ 10  ││ A   ┆ 15  ││ A   ┆ 20  ││ A   ┆ 25  ││ B   ┆ 10  ││ B   ┆ 15  ││ B   ┆ 20  ││ B   ┆ 25  ││ B   ┆ 30  │└─────┴─────┘

可以看到,upsampled_df现在包含了每个z组内所有期望的x值,包括原始数据中缺失的x值。

步骤二:执行左连接并应用插值

接下来,我们将upsampled_df与原始df进行左连接。左连接会保留upsampled_df中的所有行,并根据z和x匹配原始df中的数据。如果upsampled_df中的某个z-x组合在原始df中不存在,则y列将填充为null。最后,我们对y列执行interpolate()操作。

# 步骤二:左连接原始数据并插值# 使用upsampled_df作为左表,df作为右表# on=["x", "z"] 指定连接键为x和z# how="left" 执行左连接,保留upsampled_df的所有行# with_columns(pl.col("y").interpolate()) 对连接结果中的y列进行插值final_df = (    upsampled_df    .join(        df,        on=["x", "z"],        how="left"    )    .with_columns(        pl.col("y").interpolate()    ))print("n最终插值结果DataFrame:")print(final_df)

输出:

最终插值结果DataFrame:shape: (10, 3)┌─────┬─────┬─────┐│ z   ┆ x   ┆ y   ││ --- ┆ --- ┆ --- ││ str ┆ i64 ┆ f64 │╞═════╪═════╪═════╡│ A   ┆ 5   ┆ 1.0 ││ A   ┆ 10  ┆ 2.0 ││ A   ┆ 15  ┆ 3.0 ││ A   ┆ 20  ┆ 4.0 ││ A   ┆ 25  ┆ 5.0 ││ B   ┆ 10  ┆ 2.0 ││ B   ┆ 15  ┆ 3.0 ││ B   ┆ 20  ┆ 4.0 ││ B   ┆ 25  ┆ 5.0 ││ B   ┆ 30  ┆ 6.0 │└─────┴─────┴─────┘

可以看到,最终结果完美地满足了我们的需求。在A组中,x=15被填充,y值被插值为3.0(10:2和20:4之间)。在B组中,x=15和x=25被填充,y值也相应插值。

完整代码示例

import polars as pl# 原始DataFramedata = {    "x": [5, 10, 20, 25, 10, 20, 30],    "y": [1, 2, 4, 5, 2, 4, 6],    "z": ["A", "A", "A", "A", "B", "B", "B"]}df = pl.DataFrame(data)print("原始DataFrame:")print(df)# 步骤一:为每个分组生成所有预期的x值upsampled_df = (    df    .group_by("z")    .agg(        pl.int_range(pl.col("x").min(), pl.col("x").max() + 5, step=5).alias("x")    )    .explode("x"))print("n生成完整x值序列的DataFrame (upsampled_df):")print(upsampled_df)# 步骤二:左连接原始数据并插值final_df = (    upsampled_df    .join(        df,        on=["x", "z"],        how="left"    )    .with_columns(        pl.col("y").interpolate()    ))print("n最终插值结果DataFrame:")print(final_df)

注意事项与性能优化

Polars LazyFrame:对于大型数据集,建议使用pl.LazyFrame来延迟计算,以获得更好的性能和内存效率。上述代码中的所有操作都可以无缝地应用于LazyFrame。只需将pl.DataFrame(data)替换为pl.LazyFrame(data),并在最后调用.collect()即可。

# 示例 LazyFrame 用法lazy_df = pl.LazyFrame(data)lazy_upsampled_df = (    lazy_df    .group_by("z")    .agg(        pl.int_range(pl.col("x").min(), pl.col("x").max() + 5, step=5).alias("x")    )    .explode("x"))lazy_final_df = (    lazy_upsampled_df    .join(        lazy_df,        on=["x", "z"],        how="left"    )    .with_columns(        pl.col("y").interpolate()    )).collect() # 触发计算print("nLazyFrame 最终插值结果DataFrame:")print(lazy_final_df)

排序问题:在某些Polars版本中,group_by操作可能不保证输出的顺序。如果最终结果的行顺序对您很重要(例如,希望每个z组内的x值严格递增),可以在最终DataFrame上应用sort([“z”, “x”])。

# 对最终结果进行排序final_df_sorted = final_df.sort(["z", "x"])print("n排序后的最终插值结果DataFrame:")print(final_df_sorted)

interpolate()方法:pl.col(“y”).interpolate()默认执行线性插值。Polars的interpolate方法非常高效,并且能够处理非均匀间隔的数据点。它会根据已有的非null值,推断出null位置的值。

步长和范围:在pl.int_range(pl.col(“x”).min(), pl.col(“x”).max() + step, step=step)中,+ step是为了确保max()值本身也能被包含在生成的序列中,即使max()不是min()开始的步长的精确倍数。请根据您的具体需求调整步长(step)参数。

总结

本文提供了一种在Polars中进行复杂分组内数据插值的强大策略。通过巧妙地结合group_by生成完整序列、explode展开数据以及left_join合并原始数据,我们能够有效地填充分组内缺失的序列值,并利用interpolate()方法对关联列进行精确插值。这种方法不仅功能强大,而且在Polars的优化执行引擎下,能够高效处理大规模数据集,是数据预处理中非常有用的技巧。

以上就是Polars中分组上下文下的数据插值:处理缺失值的完整指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1372430.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python ElementTree教程:条件提取XML属性并拼接
上一篇 2025年12月14日 12:19:17
Python SSLContext 加载密钥链:处理加密私钥的策略
下一篇 2025年12月14日 12:19:28

相关推荐

  • Firefox浏览器电脑版下载 火狐手机版官方安装包

    Firefox浏览器电脑版下载 火狐手机版官方安装包Firefox浏览器电脑版下载 火狐手机版官方安装包Firefox浏览器电脑版下载 火狐手机版官方安装包Firefox浏览器电脑版下载 火狐手机版官方安装包

    Firefox浏览器官方下载地址为https://www.mozilla.org/zh-CN/firefox/new/,提供电脑版与手机版安装包;其核心功能包括标签式浏览、弹出窗口拦截、追踪器屏蔽、跨设备数据同步及密码加密存储等。 Firefox浏览器电脑版下载、火狐手机版官方安装包在哪里?这是不少…

    2026年9月26日 • 用户投稿
    100
  • 曝华为Mate X7与Mate 80系列同期发布 支持红枫影像

    曝华为Mate X7与Mate 80系列同期发布 支持红枫影像曝华为Mate X7与Mate 80系列同期发布 支持红枫影像曝华为Mate X7与Mate 80系列同期发布 支持红枫影像曝华为Mate X7与Mate 80系列同期发布 支持红枫影像

    9月26日,有数码博主透露,华为正筹备新款大折叠屏手机mate x7,该机型预计将搭载全新处理器,影像系统将支持华为红枫影像技术,并配备可变光圈镜头。由此可见,影像能力将成为mate x7的核心升级亮点之一。 参考前代产品,华为Mate X6配备了一块6.45英寸外屏(分辨率为2440×1080像素…

    2026年9月26日 • 用户投稿
    100
  • DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试

    DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试DeepSeek能做代码生成吗 使用DeepSeek进行编程任务的能力测试

    本文将探讨名为DeepSeek的语言模型在代码生成领域的表现。针对“DeepSeek能做代码生成吗?”这一问题,我们将阐述其在编程任务上的能力,并模拟进行一次能力测试的描述,帮助读者了解DeepSeek作为编程助手的潜力及其适用场景。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量…

    2026年9月26日 • 用户投稿
    100
  • 可能是目前效果最好的开源生图模型,混元生图 3.0 来了

    可能是目前效果最好的开源生图模型,混元生图 3.0 来了可能是目前效果最好的开源生图模型,混元生图 3.0 来了可能是目前效果最好的开源生图模型,混元生图 3.0 来了可能是目前效果最好的开源生图模型,混元生图 3.0 来了

    腾讯混元最新发布并开源原生多模态生图模型——混元图像 3.0(hunyuanimage 3.0)! 模型参数规模高达 80B,是目前参数量最大的开源生图模型。 同时,HunyuanImage 3.0 将理解与生成一体化融合,也是首个开源工业级原生多模态生图模型,效果对标业界头部闭源模型,堪称目前开源…

    2026年9月26日 • 用户投稿
    400
  • 如何用Java制作个人任务提醒应用

    使用Java创建任务提醒应用,核心功能包括任务管理与定时提醒。2. 设计Task类封装标题、描述、截止时间与完成状态,用LocalDateTime处理时间。3. 任务存储于List中,通过ObjectOutputStream序列化实现持久化。4. 利用ScheduledExecutorService…

    2026年9月26日
    100
  • 一键PHP环境可以同时跑多个PHP版本吗_多版本共存实现

    多PHP版本共存可行。通过宝塔、phpStudy等集成环境或手动配置Nginx+多PHP-FPM,可实现不同站点使用不同PHP版本,需注意扩展兼容性、端口冲突及安全维护。 一键PHP环境通常指的是集成化的开发环境工具,比如 XAMPP、WAMP、宝塔面板 或 phpStudy 这类软件。这类工具默认…

    2026年9月26日
    000
  • Google浏览器官网入口一键直达

    Google浏览器官网入口一键直达Google浏览器官网入口一键直达Google浏览器官网入口一键直达Google浏览器官网入口一键直达

    Google浏览器官网入口一键直达地址是https://www.google.cn/chrome/,该网址提供简洁界面、多标签管理、智能搜索、网页翻译等功能,并支持跨设备同步书签、历史记录和密码,具备高效性能与安全更新。 Google浏览器官网入口一键直达在哪里?这是不少网友都关注的,接下来由PHP…

    2026年9月26日 • 用户投稿
    000
  • Win7系统如何让壁纸变换淡入淡出

    Win7系统如何让壁纸变换淡入淡出Win7系统如何让壁纸变换淡入淡出Win7系统如何让壁纸变换淡入淡出Win7系统如何让壁纸变换淡入淡出

    在windows 7操作系统里,除了常规方式更换桌面背景之外,还有一种更为高级的切换模式——即淡入淡出效果。接下来,win10系统之家的小编将为您详细讲解具体的操作步骤。 首先,准备好您想要用于淡入淡出效果的桌面背景图片,并调整更换时间间隔为10秒(当然,您可以依据需要自行调整此参数),如下图所示:…

    2026年9月26日 • 用户投稿
    000
  • 查看Oracle安装的具体版本

    查看Oracle安装的具体版本查看Oracle安装的具体版本查看Oracle安装的具体版本查看Oracle安装的具体版本

    抱歉,我无法提供关于 Oracle 版本的具体代码示例。我为您提供一篇关于 Oracle 数据库安装版本查询的中文文章。以下是文章示例: 标题:如何查看 Oracle 数据库的安装版本 Oracle 数据库是企业级数据库管理系统的领先者,它的各个版本具有不同的功能和特性。在使用 Oracle 数据库…

    2026年9月26日 • 用户投稿
    000
  • 抖音内容怎么吸引流量_抖音内容吸引流量的核心方法

    抖音内容怎么吸引流量_抖音内容吸引流量的核心方法抖音内容怎么吸引流量_抖音内容吸引流量的核心方法抖音内容怎么吸引流量_抖音内容吸引流量的核心方法抖音内容怎么吸引流量_抖音内容吸引流量的核心方法

    答案:提升抖音推荐需优化开头3秒、内容结构、互动率、AI工具和垂直领域。打造强钩子如结果前置、冲突制造、高悬念提问;采用痛点—解决—升华结构,每30秒设信息点;引导评论、挑战和点赞;用AI生成素材与分析数据;明确账号定位并连续发布同领域内容10条以上,前3-5天模拟用户行为助系统打标。 如果您发布的…

    2026年9月26日 • 用户投稿
    400
  • AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应

    AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应AI辩论教练:用豆包AI+Character模拟对手训练逻辑反应

    你可以使用豆包ai和character.ai进行辩论训练,具体步骤包括:1.选择合适的平台,豆包ai适合快速访问,character.ai适合丰富角色设定;2.创建或选择辩论角色并设定背景、立场和风格;3.明确辩题并输入给ai;4.轮流发言并及时记录分析;5.利用豆包ai进行观点碰撞、论据挖掘和模拟…

    2026年9月26日 • 用户投稿
    000
  • Epic禁止自动启动设置_开机不启动Epic解决方案

    Epic禁止自动启动设置_开机不启动Epic解决方案Epic禁止自动启动设置_开机不启动Epic解决方案Epic禁止自动启动设置_开机不启动Epic解决方案Epic禁止自动启动设置_开机不启动Epic解决方案

    可通过客户端设置、任务管理器、启动文件夹或注册表编辑器禁用Epic自动启动。首先在Epic设置中关闭“启动时启动”选项;其次在任务管理器“启动”选项卡中禁用Epic Games Launcher;然后检查并删除“shell:startup”启动文件夹中的相关快捷方式;最后通过注册表编辑器删除HKEY…

    2026年9月26日 • 用户投稿
    100
  • Linux网络配置与防火墙设置

    Linux网络配置与防火墙设置Linux网络配置与防火墙设置Linux网络配置与防火墙设置Linux网络配置与防火墙设置

    本文介绍了linux网络配置和防火墙设置方法。1. 配置网络接口需修改/etc/network/interfaces或netplan配置文件,设置静态ip、子网掩码、网关和dns服务器;2. 使用iptables命令管理防火墙,例如sudo iptables -a input -p tcp &#82…

    2026年9月26日 • 用户投稿
    000
  • Java项目质量保障体系:静态分析、单元测试与集成测试

    Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试Java项目质量保障体系:静态分析、单元测试与集成测试

    静态分析是Java质量保障的第一道防线,因其能在代码运行前发现潜在缺陷。SonarQube等工具通过集成Checkstyle、PMD等规则集,实现代码规范、安全、性能的全面扫描,及早暴露空指针、资源泄漏等问题,减少技术债。它作为“预检系统”,避免低级错误流入后续阶段,提升整体代码整洁度,为单元与集成…

    2026年9月26日 • 用户投稿
    000
  • 如何解决MySQL版本兼容性问题的处理方法?

    如何解决MySQL版本兼容性问题的处理方法?如何解决MySQL版本兼容性问题的处理方法?如何解决MySQL版本兼容性问题的处理方法?如何解决MySQL版本兼容性问题的处理方法?

    mysql版本兼容性问题可通过升级、降级或编写兼容代码解决。具体步骤为:1.明确问题根源,如sql语法、函数或协议不兼容;2.选择升级或降级版本,优先考虑升级以获取优化和修复;3.使用注释语法编写兼容性sql;4.借助orm框架屏蔽底层差异;5.通过查询版本号或配置文件实现条件判断;6.利用dock…

    2026年9月26日 • 用户投稿
    100
  • 自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法

    自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法自媒体内容怎么避免同质化_避免自媒体内容同质化的实用方法

    内容同质化指不同来源的信息高度相似,缺乏独特性。其表现为内容重复、视角单一、模板化创作等;核心原因包括平台算法驱动形成“信息茧房”、原创成本高导致复制泛滥、创作者创新能力不足;这会降低用户信息筛选效率,阻碍多元思考,并削弱社会创新动力;解决方向需优化算法以增加多样性权重、加强原创保护机制,并提升用户…

    2026年9月26日 • 用户投稿
    000
  • 如何优化翅片散热器的散热效率

    如何优化翅片散热器的散热效率如何优化翅片散热器的散热效率如何优化翅片散热器的散热效率如何优化翅片散热器的散热效率

    优化翅片散热器的散热效率可以通过改进翅片设计、选择合适的材料和优化流体流动来实现。1. 改进翅片设计:采用波浪形或锯齿形的翅片,优化高度和厚度,通过仿真软件找到最佳参数。2. 选择合适的材料:使用铝合金、铜或新型材料如石墨烯,考虑导热性、成本和工作环境。3. 优化流体流动:调整风扇转速和位置,采用导…

    2026年9月26日 • 用户投稿
    000
  • 什么是thinkphp框架

    什么是thinkphp框架什么是thinkphp框架什么是thinkphp框架什么是thinkphp框架

    ThinkPHP框架是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,…

    2026年9月26日 • 用户投稿
    000
  • 悟空浏览器怎么设置鼠标手势_悟空浏览器鼠标手势功能开启与自定义

    悟空浏览器怎么设置鼠标手势_悟空浏览器鼠标手势功能开启与自定义悟空浏览器怎么设置鼠标手势_悟空浏览器鼠标手势功能开启与自定义悟空浏览器怎么设置鼠标手势_悟空浏览器鼠标手势功能开启与自定义悟空浏览器怎么设置鼠标手势_悟空浏览器鼠标手势功能开启与自定义

    悟空浏览器可通过开启鼠标手势提升操作效率,依次在设置中启用功能、查看默认手势、添加自定义轨迹并绑定命令,还可修改或删除已有手势以优化使用体验。 如果您希望在浏览网页时通过鼠标滑动快速执行常用操作,悟空浏览器的鼠标手势功能可以显著提升您的操作效率。启用并自定义鼠标手势后,您可以通过特定的鼠标轨迹快速返…

    2026年9月26日 • 用户投稿
    000
  • 豌豆素质如何退费

    豌豆素质如何退费豌豆素质如何退费豌豆素质如何退费豌豆素质如何退费

    在选择教育课程时,退费问题一直是大家关注的焦点。对于豌豆素质的退费流程,很多家长都希望能有一个全面清晰的了解。 首先,要明确退费的条件。一般来说,如果在课程未开始前申请退费,通常是比较容易办理的。比如因为个人时间安排冲突,提前向豌豆素质官方客服说明情况,经过核实后,会按照一定比例退还已缴纳的费用。 …

    2026年9月26日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信