Pandas新手求助:如何用一行代码从DataFrame列按指定长度列表分组
一行Pandas分组提示:利用Numpy的重复生成器
嘿,我太懂这种想纯靠Pandas/Numpy原生能力一行搞定的心态了!其实你要的功能完全可以实现,核心思路是先自动生成对应每行的分组标签,再用这个标签做groupby——全程不用写自定义Python函数。
给你具体的提示和代码:
- 用
numpy.repeat()函数,把分组编号(比如对应sizes里的每个位置:0、1、2)按照sizes中的数值重复次数来生成标签数组。如果sizes里有0,对应的分组编号会被自动跳过,完美符合你的需求。 - 把这个生成的标签数组直接传给
df.groupby(),就是一行代码的事儿。
完整示例代码:
import pandas as pd import numpy as np utterance_list = ['this', 'is', 'not', 'working'] df = pd.DataFrame({'utterances': utterance_list}) sizes = [1, 0, 3] # 一行完成分组 groups = df.groupby(np.repeat(range(len(sizes)), sizes))
验证一下结果:
- 执行
groups.groups会得到:{0: [0], 2: [1, 2, 3]}(因为sizes[1]是0,所以分组1没有数据) - 执行
groups['utterances'].apply(list)会得到每个组的语料列表:0 [this] 2 [is, not, working] Name: utterances, dtype: object
小提醒:要确保sizes中所有数值的总和等于你的DataFrame行数哦,不然会报错~
内容的提问来源于stack exchange,提问作者xoihiox
相关产品推荐
相关产品推荐

