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

如何将Pandas分组转换为不同列?附DataFrame分组处理需求

Pandas分组转不同列并保留统一数量末尾观测值的实现方法

没问题,我帮你搞定这个Pandas的分组转列需求!先理清楚你的核心要求:按unit分组,先找到所有分组里最少的观测数量(这里unit 2只有2条数据,所以所有组都取最后2条),然后把每个组的s1列单独拆成新列,最终得到unit_1、unit_2这样的结果。

步骤1:准备数据并计算最小观测数

首先先还原你的原始DataFrame,然后算出所有分组里最小的行数:

import pandas as pd

# 构建你的原始DataFrame
df = pd.DataFrame({
    'unit': [1, 1, 1, 2, 2],
    'time': [1, 2, 3, 1, 2],
    's1': [2, 4, 9, 5, 3],
    's2': [3, 5, 7, 2, 1]
})

# 计算所有unit分组中最小的观测数量
min_row_count = df.groupby('unit').size().min()

步骤2:分组取数并转成目标格式

接下来用Pandas的分组和行列转换方法,一步到位得到你要的结果:

# 分组后取每个组最后min_row_count行的s1,再把unit转成列
final_result = (df.groupby('unit')['s1']
               .tail(min_row_count)  # 保留每个组最后N行(N是最小观测数)
               .unstack()            # 把行索引的unit转成列
               .rename(columns=lambda x: f'unit_{x}'))  # 重命名列名

最终结果

运行上面的代码后,final_result就是你想要的格式:

unit_1  unit_2
0       4       5
1       9       3

代码解释

  • groupby('unit')['s1'].tail(min_row_count):针对每个unit分组,只保留最后min_row_count条记录的s1值,确保所有分组的行数统一
  • unstack():把原来作为行索引的unit标签转换为列,自动对齐每个分组的对应行
  • rename(columns=lambda x: f'unit_{x}'):把列名从原始的1、2改成更直观的unit_1、unit_2

这个方法扩展性很强,哪怕你后续有更多unit值,也会自动生成对应的列,不需要修改代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:57:47