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

如何对DataFrame内的独立数据块进行微型转置?

解决方案

步骤说明

原数据的规律是每5行一组:第1行是公司名称行,后续4行对应各金额列的数值。我们可以通过分组提取、赋值的方式实现需求:

  1. 标记分组:识别公司名称行,以此为依据将数据按5行一组划分
  2. 提取金额:每个分组内,把后续4行的金额值提取出来,对应赋值到公司行的各列
  3. 筛选结果:只保留每个分组的公司行,得到最终结构

代码实现

import pandas as pd

# 假设你的原始DataFrame为df
# 1. 标记公司行:通过是否包含$符号反向判断(金额行均带$)
df['is_company'] = ~df['Company Name'].str.contains('\$')

# 2. 创建分组ID:每遇到一个公司行,分组号递增
df['group_id'] = df['is_company'].cumsum()

# 3. 分组处理:提取每组内的金额并赋值给公司行
def process_group(group):
    # 取出组内第一行(公司行)
    company_row = group.iloc[[0]].copy()
    # 提取组内后4行的金额值,对应赋值到各列
    amounts = group.iloc[1:5]['Company Name'].tolist()
    company_row['Total Amount Due'] = amounts[0]
    company_row['0-10 days'] = amounts[1]
    company_row['10-20 days'] = amounts[2]
    company_row['20-30 days'] = amounts[3]
    return company_row

# 批量处理所有分组,合并结果
result_df = df.groupby('group_id').apply(process_group).reset_index(drop=True)

# 清理辅助列
result_df = result_df.drop(['is_company', 'group_id'], axis=1)

print(result_df)

代码解释

  • ~df['Company Name'].str.contains('\$'):反向筛选出不含$的公司名称行
  • df['is_company'].cumsum():累积计数公司行,生成每个5行组的唯一标识
  • process_group函数:对每个分组单独处理,提取后4行的金额值覆盖公司行的对应列
  • 最后通过groupby.apply批量处理所有分组,得到目标结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:13:25