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

如何在Pandas中将DataFrame按日期聚合并将指定行数转换为列?

解决方案:Pandas实现日期分组行转列

这个需求我之前处理过,用reshape或melt确实不太贴合场景,试试groupby+cumcount+pivot的组合方案,完美适配你的需求!

步骤1:给每个日期组内的行添加序号

首先得给每个timestamp分组里的每一行分配一个组内序号,这样后续才能把这些行对应到top1、top2...top25的列上。用cumcount()就能轻松实现,它默认从0开始计数,所以我们加1让序号从1开始:

import pandas as pd

# 假设你的原始DataFrame名为df
df['rank'] = df.groupby('timestamp')['title'].cumcount() + 1

这一步后,你的数据会变成这样的结构:

titletimestamprank
String one2016-12-021
String two2016-12-022
.........
String twenty-five2016-12-0225
String twenty-six2016-12-031
.........

步骤2:用pivot实现行转列

接下来用pivot方法把行转成列,指定索引为timestamp,列是刚生成的rank(还要把列名改成top N的格式),值就是title:

# 执行行转列操作
result_df = df.pivot(index='timestamp', columns='rank', values='title')

# 重命名列,把1、2...25改成top1、top2...top25的格式
result_df.columns = [f'top {col}' for col in result_df.columns]

# 可选:把timestamp从索引转回普通列
result_df = result_df.reset_index()

最终结果验证

运行完上面的代码,你就能得到完全符合预期的DataFrame:

timestamptop 1top 2...top 25
2016-12-02String oneString two...String twenty-five
2016-12-03String twenty-sixString twenty-seven...String fifty

额外补充

  • 如果数据集里存在某日期行数不等于25的情况,pivot会自动在缺失位置填充NaN,你可以用result_df.fillna('')把空值替换成空字符串,或者根据业务需求做其他处理。
  • 这个方案完全适配大规模数据(数年的日期数据),pandas的这些方法效率很高,不用担心性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:12:44