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

如何用Pandas DataFrame实现按Version分组的指定格式输出?

问题描述

我有如下的Pandas DataFrame:

import pandas as pd
data = {
    'version': [4229, 6065, 9209, 2304, 4229, 6065, 9209, 2304, 4229, 6065, 9209, 2304, 4229, 6065, 9209, 2304],
    'Numbers': [234, 567, 8910, 1122, 3344, 5566, 1234, 6789, 1376, 1111, 2222, 145, 267, 345, 557, 778]
}
df = pd.DataFrame(data)

我期望得到按version分组后的输出,每个版本对应的Numbers值排成一行:

4229  234  3344  1376  267
6065  567  5566  1111  345
9209  8910  1234  2222  557
2304  1122  6789  145  778

我尝试用df.groupby['version'],但没有得到预期的结果,希望有人能帮忙解决这个问题。

解决方案

其实你之前用df.groupby['version']只是拿到了分组对象,还需要进一步处理才能把每个组里的Numbers值展开成一行多列的形式。这里有两种简单好用的方法帮你实现需求:

方法1:分组后聚合为列表再展开

先把每个版本对应的Numbers聚合成一个列表,再把列表拆成多列,最后就能得到你要的格式:

# 按version分组,把每组的Numbers打包成列表
grouped_df = df.groupby('version')['Numbers'].agg(list).reset_index()

# 将列表拆成单独的列
expanded_df = pd.DataFrame(
    grouped_df['Numbers'].tolist(),
    index=grouped_df['version']
).reset_index()

# 如果要和你预期的纯文本格式一致,可以这样打印
for _, row in expanded_df.iterrows():
    print(' '.join(map(str, row.values)))

方法2:用序号标记分组内位置,再转置列

给每个版本下的每一行加个序号,然后通过透视把行转成列,也能达到效果:

# 给每个分组内的行分配顺序号
df['group_idx'] = df.groupby('version').cumcount()

# 透视:version作为行,group_idx作为列,值是Numbers
pivoted_df = df.pivot(
    index='version',
    columns='group_idx',
    values='Numbers'
).reset_index()

# 打印成目标格式
for _, row in pivoted_df.iterrows():
    # 去掉可能的空值(不过你的数据每个组都是4个值,这里其实可以不用)
    print(' '.join(map(str, row.dropna().values)))

两种方法都能输出你想要的结果,选哪种看你习惯就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:07:45