如何基于Pandas DataFrame某列唯一值生成特定形状DataFrame并拆分为子DataFrame
解决Pandas按唯一值生成DataFrame并拆分的问题
我来帮你搞定这个问题!你遇到的核心卡点是groupby返回的是分组对象,没法直接用iloc切片,所以得先把它转换成普通的DataFrame,再进行拆分操作。下面是具体的实现步骤:
一、生成形状为(1714, 36)的目标DataFrame
这里给你两种实用的方法,按需选择:
方法1:用drop_duplicates快速生成(推荐)
如果你的需求只是保留每个A列唯一值对应的一行数据(比如默认保留每组第一次出现的行),这个方法最简单直接:
# 保留每个A唯一值对应的第一行,生成目标DataFrame unique_df = df.drop_duplicates(subset='A', keep='first') # 重置索引(可选,让索引从0开始,后续切片更直观) unique_df = unique_df.reset_index(drop=True)
这样得到的unique_df就是标准的Pandas DataFrame,形状正好是(1714, 36),完全支持iloc操作。
方法2:用groupby结合聚合转换
如果需要对每个分组做自定义聚合(比如取均值、求和,或者保留特定行),可以用groupby先聚合再转成DataFrame:
# 示例:取每个分组的第一行,效果和drop_duplicates一致 unique_df = df.groupby('A').first().reset_index() # 如果你有自定义聚合需求,比如对不同列做不同操作: # unique_df = df.groupby('A').agg( # {'B': 'mean', # B列取均值 # 'C': 'sum', # C列求和 # 'D': 'last'} # D列取最后一行的值 # ).reset_index()
这里groupby().first()会返回一个DataFrame,再通过reset_index()把A列从索引变回普通列,确保最终结果的列数和原DataFrame一致。
二、拆分为4个子DataFrame
现在unique_df是普通的DataFrame了,直接用iloc按照你想要的逻辑拆分即可:
# 按500行的间隔拆分,注意iloc是左闭右开的索引规则 df1 = unique_df.iloc[:500, :] df2 = unique_df.iloc[500:1000, :] df3 = unique_df.iloc[1000:1500, :] df4 = unique_df.iloc[1500:, :] # 最后一个子DataFrame的形状是(214, 36),因为1714-1500=214
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

