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

如何使用groupby/pivot修改指定的Pandas DataFrame?

实现方法当然有!这是典型的宽表转长表操作

完全不用复杂的步骤,Pandas的melt()函数就是专门干这个的,几步就能搞定你的需求。我给你举个实际例子演示:

先假设你的原始DataFrame是这样的

import pandas as pd

df = pd.DataFrame({
    'ID': [1, 2, 3],
    'Jan': [10, 20, 30],
    'Feb': [15, 25, 35],
    'Mar': [12, 22, 32],
    'Category': ['A', 'B', 'A']  # 假设还有其他需要保留的列
})

核心操作代码

如果你想先把ID设为索引再转换:

# 第一步:把ID设为索引
df.set_index('ID', inplace=True)
# 第二步:转成长格式,把月份列转成month列
long_df = df.melt(var_name='month', value_name='数值')

或者你也可以一步到位,先转换再设索引:

long_df = df.melt(id_vars='ID', var_name='month', value_name='数值').set_index('ID')

参数解释(帮你理解为啥这么写)

  • id_vars:指定哪些列是标识列(不需要转成行的列),比如这里的ID,如果还有其他像Category这样的列需要保留,就写成id_vars=['ID', 'Category']
  • var_name:原来的月份列名(比如Jan、Feb)要放到的新列名,就是你要的month
  • value_name:原来月份列里的数值对应的新列名,你可以根据实际业务改名,比如sales、amount都行

转换后的结果就是每个ID对应一行月份+数值的组合,完全符合你的要求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:18:37