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

Pandas多列分组求和生成spikes二维数组实现方法

按trial_time和bin_time分组聚合spikes生成二维统计数组

问题描述

现有千行级记录的DataFrame,样例数据如下:

cluster_id     bin_time     trial_time           spikes
1               0               0.5                1
2               5               0.7                0 
6               0               0.5                5
3               5               0.7                0
2               5               0.5                1
8.              0.              0.7.               0

数据前三列存在重复值,处理要求:

  • 直接丢弃cluster_id维度,不需要基于该字段做拆分统计
  • 对每一组唯一的trial_time+bin_time组合,计算组内所有spikes的总和
  • 最终输出纯数值二维numpy数组:Y轴对应唯一trial_time值,X轴对应唯一bin_time值,元素为对应分组的spikes求和结果

之前的无效尝试

曾使用如下代码实现,但结果中每个trial_time分组下仍保留了cluster_id带来的重复值,不符合预期:

new_df = groupby('trial_time')['spikes'].apply(lambda x: list(x))

样例预期计算结果

针对给出的样例,各分组计算逻辑为:

  • trial_time=0.5、bin_time=0:spikes总和=1+5=6
  • trial_time=0.5、bin_time=5:spikes总和=1
  • trial_time=0.7、bin_time=0:spikes总和=0
  • trial_time=0.7、bin_time=5:spikes总和=0+0=0
    最终二维数组仅保留上述统计数值即可。

实现代码

核心逻辑是先按两个分组维度做聚合求和,再通过unstack将行索引转列索引生成宽表,最后转numpy数组即可,注意提前清洗数值列的格式异常(比如样例中带多余小数点的8./0.7.这类值,先转成标准浮点型避免分组错误):

# 先清洗数值列,处理格式异常
for col in ['bin_time', 'trial_time', 'spikes']:
    df[col] = pd.to_numeric(df[col], errors='coerce').fillna(0)

# 双维度分组求和,unstack转成行为trial_time、列为bin_time的矩阵,缺失值填0
pivot_df = df.groupby(['trial_time', 'bin_time'], as_index=True)['spikes'].sum().unstack(fill_value=0)

# 转成目标二维numpy数组
result = pivot_df.to_numpy()

针对样例数据,运行后result输出为:

array([[6, 1],
       [0, 0]])

说明:数组行默认按trial_time升序排列(0.5、0.7),列默认按bin_time升序排列(0、5),和预期计算结果完全一致。如果需要自定义轴的顺序,提前对DataFrame对应字段做排序后再分组即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:27:29