如何按每5行执行group by并将值转换为列表列格式
数据表格分组转换实现方案
需求说明
需要对数据表格执行以下转换:
- 按每5行进行分组
- 每组内
Value1的各行值依次填入a、b、c、d、e列,Value2的各行值同理 - 每组的
Data set字段取该组首行的Data set值 - 新增
Value字段区分Value1和Value2
原始表格
| Data set | Value1 | Value2 |
|---|---|---|
| 1.1 | 2 | 3 |
| 1.2 | 4 | 5 |
| 1.3 | 6 | 7 |
| 1.4 | 8 | 9 |
| 1.5 | 10 | 11 |
| 2.1 | 2 | 3 |
| 2.2 | 4 | 5 |
| 2.3 | 6 | 7 |
| 2.4 | 8 | 9 |
| 2.5 | 10 | 11 |
目标表格
| Data set | Value | a | b | c | d | e |
|---|---|---|---|---|---|---|
| 1.1 | Value 1 | 2 | 4 | 6 | 8 | 10 |
| 1.1 | Value 2 | 3 | 5 | 7 | 9 | 11 |
| 2.1 | Value 1 | 2 | 4 | 6 | 8 | 10 |
| 2.1 | Value 2 | 3 | 5 | 7 | 9 | 11 |
实现代码(Python Pandas)
以下是用Pandas库实现上述转换的代码:
import pandas as pd # 构造原始数据(实际场景可替换为读取文件逻辑) df = pd.DataFrame({ 'Data set': ['1.1', '1.2', '1.3', '1.4', '1.5', '2.1', '2.2', '2.3', '2.4', '2.5'], 'Value1': [2,4,6,8,10,2,4,6,8,10], 'Value2': [3,5,7,9,11,3,5,7,9,11] }) # 生成每5行一组的分组标识 df['group_id'] = df.index // 5 # 处理分组并生成结果 result_rows = [] for _, group_data in df.groupby('group_id'): group_ds = group_data['Data set'].iloc[0] # 生成Value1对应的行 val1_row = { 'Data set': group_ds, 'Value': 'Value 1', 'a': group_data['Value1'].iloc[0], 'b': group_data['Value1'].iloc[1], 'c': group_data['Value1'].iloc[2], 'd': group_data['Value1'].iloc[3], 'e': group_data['Value1'].iloc[4] } # 生成Value2对应的行 val2_row = { 'Data set': group_ds, 'Value': 'Value 2', 'a': group_data['Value2'].iloc[0], 'b': group_data['Value2'].iloc[1], 'c': group_data['Value2'].iloc[2], 'd': group_data['Value2'].iloc[3], 'e': group_data['Value2'].iloc[4] } result_rows.extend([val1_row, val2_row]) # 转换为最终DataFrame final_df = pd.DataFrame(result_rows).reset_index(drop=True) print(final_df)
代码说明
- 分组逻辑:通过
df.index // 5生成连续的分组标识,精准实现每5行一组的需求 - 组内数据提取:遍历每个分组,提取组内首行的
Data set值作为该组的标识值 - 列映射:将每组内
Value1、Value2的5个行值分别映射到a-e列,生成对应两行数据 - 结果整合:将所有分组的结果行整合为最终的目标格式DataFrame
内容的提问来源于stack exchange,提问作者Halahhemy
相关产品推荐
相关产品推荐

