按特定行索引规则拆分Pandas DataFrame的方法求助
按特定行索引规则拆分Pandas DataFrame的方法求助
嗨Jasper,我完全懂你的需求啦!你是想把100行的DataFrame按「索引模5的余数」来分组——也就是把所有索引是5n+0、5n+1…5n+4的行分别归为5个组,但你之前用l_df.index//5的方式,是把连续的5行(比如0-4、5-9)捆成一组,这就和你要的效果完全反过来了,难怪每个组只有5行~
给你两个简单的解决办法:
方法一:直接按索引模5分组(和你的思路对应)
用l_df.index % 5来分组,这样余数相同的索引会被分到同一组,正好符合你的要求:
# 按索引模5的余数分组,余数0对应0、5、10…95行,以此类推 grouped = l_df.groupby(l_df.index % 5) # 获取每个分组 df0 = grouped.get_group(0) # 包含0、5、10…95行 df1 = grouped.get_group(1) # 包含1、6、11…96行 df2 = grouped.get_group(2) # 包含2、7、12…97行 df3 = grouped.get_group(3) # 包含3、8、13…98行 df4 = grouped.get_group(4) # 包含4、9、14…99行
这样每个分组都会有20行(100/5),完全匹配你想要的结果。
方法二:更简洁的批量获取分组
如果不想一个个赋值,也可以把所有分组直接存到列表里,用起来更方便:
# 把分组转换成列表,顺序是余数0到余数4的组 dfs_list = [group for _, group in l_df.groupby(l_df.index % 5)] # 调用的时候直接用索引,比如dfs_list[0]就是第一个分组,dfs_list[4]是最后一个
简单总结下:你要的是「间隔5行取行」,所以用模运算(%);之前用的「//」是「连续5行一组」,这就是问题的核心啦~
备注:内容来源于stack exchange,提问作者Jasper
相关产品推荐
相关产品推荐

