如何遍历Pandas DataFrame并按指定列唯一值拆分为多个独立DataFrame
实现Pandas DataFrame按指定列拆分的方法
如果你的原始DataFrame存储在列表中,先取出对应的DataFrame对象即可,示例为df = 你的列表名[索引值]。
两种常用的实现方式如下,可根据需求选择:
方法1:用groupby直接拆分(更简洁,无需手动枚举ID值)
不需要提前知道ID列的具体取值,groupby会自动按所有唯一ID值拆分,结果可以存在字典中方便调用:
import pandas as pd # 示例原始DataFrame,实际使用时替换为你自己的df df = pd.DataFrame({ 'ID': ['0902', '0105', '0902', '0105', '0902'], 'Colour': ['红', '蓝', '绿', '黄', '紫'], 'Transport': ['公交', '地铁', '开车', '骑车', '步行'] }) # 按ID列拆分,字典的key为ID值,value为对应的子DataFrame df_dict = dict(tuple(df.groupby('ID'))) # 按需求取出对应ID的独立DataFrame df1 = df_dict['0902'] df2 = df_dict['0105']
- 优势:不需要手动写遍历逻辑,也不用硬编码ID取值,后续ID新增其他值时无需修改代码即可自动完成拆分。
方法2:手动遍历唯一值拆分(符合遍历实现的要求)
如果你明确需要用遍历方式实现,可以按以下逻辑编写:
# 先获取ID列所有唯一取值 unique_ids = df['ID'].unique() # 遍历拆分后存到列表中 result_dfs = [] for id_val in unique_ids: # 筛选对应ID的行,加copy()生成独立副本避免修改子df时影响原df sub_df = df[df['ID'] == id_val].copy() result_dfs.append(sub_df) # 取出对应子DataFrame,顺序和unique_ids的返回顺序一致 df1 = result_dfs[0] # 对应第一个出现的ID,示例中为0902 df2 = result_dfs[1] # 对应第二个出现的ID,示例中为0105
注意:如果需要对子DataFrame做修改且不影响原始DataFrame,务必加
.copy()方法生成独立副本,避免触发Pandas的链式索引警告。
内容的提问来源于stack exchange,提问作者youaresoconfused
相关产品推荐
相关产品推荐

