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

如何用Pythonic方式对粒子分组应用自定义类生成合并DataFrame

问题:批量处理粒子运动学数据

我有一个记录粒子集合轨迹的DataFrame:

t = 
                  y            x          mass  ...        ep  frame  particle
0         19.786517  1000.656583   8673.042534  ...  0.078461      0         0
376     1424.723047   216.250029  14354.289353  ...  0.108937      0         1
375     1426.538703  1564.423771  11674.833112  ...  0.130680      0         2
374     1428.278151  2018.516185  18706.219367  ...  0.075380      0         3
373     1426.137787   626.417419  20111.330551  ...  0.060769      0         4
            ...          ...           ...  ...       ...    ...       ...
750968   717.455045   170.929977  12260.771171  ...  0.027305   1364      2896
750967   718.018964   926.256111  14161.143811  ...  0.019303   1364      5743
750966   709.771559   239.818120  17578.233781  ...  0.018574   1364      6599
750980   758.318235  1232.281636   7943.370072  ...  0.041535   1364      6228
751327  2029.563012  1472.951389  11750.935891  ...  0.051639   1364      6253

[751328 rows x 10 columns]

我开发了Particle_Kinematics类,传入单个粒子的DataFrame(比如粒子2)后,会返回包含速度、角度等运动学属性的新DataFrame:

gb = t.groupby('particle')
p2_df = gb.get_group(2)

PK = Particle_Kinematics(p2_df, n=0.5)
PK_df = PK.to_df()

处理后的PK_df包含以下列:

PK_df.columns = ['y', 'x', 'mass', ..., 'v_y', 'v_x', 'v', 'angle']

请问有没有Pythonic的方式,对所有粒子批量应用这个类,最终合并成一个完整的总DataFrame?我查了GroupBy文档,没找到合适的聚合或转换方法。


解决方案

可以用GroupBy.apply()方法实现批量处理,这是最符合Python风格的方案之一。apply()会遍历每个粒子分组,对单个粒子的DataFrame执行自定义逻辑,最后自动合并所有处理结果。

具体实现代码:

def process_single_particle(df):
    # 初始化运动学类并返回处理后的DataFrame
    pk_instance = Particle_Kinematics(df, n=0.5)
    return pk_instance.to_df()

# 对所有粒子分组批量处理,自动合并结果
full_processed_df = t.groupby('particle').apply(process_single_particle)

# 重置索引(可选,移除多级索引,让结构更简洁)
full_processed_df = full_processed_df.reset_index(drop=True)

关键说明:

  • apply()会自动把每个粒子的子DataFrame传入process_single_particle函数
  • 函数内部完成Particle_Kinematics的初始化和结果转换
  • 所有处理后的子DataFrame会被无缝拼接成一个大的DataFrame,保留原有的轨迹和新增的运动学属性
  • 如果你的Particle_Kinematics类已经保留了particle列,可根据需求选择是否重置索引

内容的提问来源于stack exchange,提问作者J.Pottiez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:28:07