如何按索引分批选取行并保存至同一DataFrame的不同列?
没问题,我来给你一步步讲清楚怎么实现这个需求,用Pandas就能轻松搞定~
实现按索引分块并合并为多列DataFrame
首先假设你已经有了一个原始的大DataFrame(比如叫df_raw),我们的目标是把它按每30行一个块拆分,再把每个块作为新DataFrame的一列,重复操作直到处理完所有数据。下面是具体的实现步骤和代码示例:
1. 准备工作(导入库+示例数据)
先导入Pandas,没安装的话先执行pip install pandas安装。这里我造了个示例数据方便你测试,你替换成自己的真实数据即可:
import pandas as pd # 生成120行的单列DataFrame作为示例 df_raw = pd.DataFrame({'原始数据': range(120)})
2. 核心实现代码
我们用循环重复分块+合并的操作,关键用iloc按位置取行,再用pd.concat按列拼接:
# 定义每个块的行数(你要的30行) block_size = 30 # 初始化空的结果DataFrame new_df = pd.DataFrame() # 计算能分成多少个完整的30行块 total_blocks = len(df_raw) // block_size # 循环处理每个块 for block_num in range(total_blocks): # 计算当前块的起始/结束索引(iloc是左闭右开,所以end_idx=start+30) start_idx = block_num * block_size end_idx = start_idx + block_size # 取出当前块的行数据 current_block = df_raw.iloc[start_idx:end_idx] # 给当前块的列重命名,避免重复列名(比如第1组数据、第2组数据...) current_block.columns = [f'第{block_num+1}组数据'] # 把当前块拼接到结果DataFrame的右侧(按列拼接,axis=1) new_df = pd.concat([new_df, current_block], axis=1) # 查看前几行结果 print(new_df.head())
3. 处理剩余行(可选)
如果你的原始数据行数不是30的整数倍(比如100行会剩下10行),可以选两种处理方式:
- 丢弃剩余行:循环前先截断数据
remaining_rows = len(df_raw) % block_size if remaining_rows != 0: df_raw = df_raw.iloc[:-remaining_rows] # 去掉最后剩余的行 - 保留剩余行:把剩余行作为最后一个块,不足的位置会自动填充
NaN# 额外处理剩余行 remaining_rows = len(df_raw) % block_size if remaining_rows != 0: start_idx = total_blocks * block_size current_block = df_raw.iloc[start_idx:] current_block.columns = [f'第{total_blocks+1}组数据'] new_df = pd.concat([new_df, current_block], axis=1)
关键知识点解释
iloc[start:end]:按位置索引取行,左闭右开,比如0:30会取索引0到29的30行数据pd.concat([df1, df2], axis=1):按列拼接两个DataFrame,把第二个的列加到第一个的右侧- 列重命名:必须给每个块的列起不同名字,否则拼接后会出现重复列名,导致数据混乱
执行完后,new_df就是你想要的结果——每个30行的块对应一列,所有数据都存在同一个DataFrame里啦~
内容的提问来源于stack exchange,提问作者Amit Kumar
相关产品推荐
相关产品推荐

