如何从分组后的Pandas DataFrame中获取不含索引的单元格值
解决pandas groupby遍历中提取列纯值的问题
哈哈,这个问题我之前也碰到过!当用df.groupby()遍历分组时,直接取group['B']返回的是带索引的Series,确实挺烦的——尤其是索引不连续的时候,iloc完全派不上用场。别担心,有几个简单的办法能直接拿到你想要的纯值(比如one、three这类),完全不用管索引情况:
方法1:用.tolist()直接转成Python列表
这是最直观的方式,直接把Series转换成纯值列表,自动丢弃索引:
for name, group in df.groupby('你的分组列名'): # 直接获取B列的纯值列表 b_values = group['B'].tolist() print(b_values)
方法2:用.values或.to_numpy()获取numpy数组
如果需要numpy数组格式的结果,可以用这两个方法,同样会忽略索引:
for name, group in df.groupby('你的分组列名'): # 两种写法都可以,.to_numpy()是pandas推荐的更明确的写法 b_array = group['B'].values # 或者 b_array = group['B'].to_numpy() print(b_array)
完整示例演示
给你整个流程的代码,方便你测试:
import pandas as pd # 构造一个索引不连续的测试DataFrame df = pd.DataFrame({ '分组列': ['组1', '组1', '组2', '组2', '组3'], 'B': ['one', 'two', 'three', 'four', 'five'] }, index=[1, 3, 5, 7, 9]) # 原来的遍历方式(带索引) print("=== 原来的输出(带索引) ===") for name, group in df.groupby('分组列'): print(f"分组:{name}") print(group['B']) # 改进后的遍历方式(纯值) print("\n=== 改进后的输出(纯值) ===") for name, group in df.groupby('分组列'): print(f"分组:{name}") print(group['B'].tolist()) # 这里用tolist()拿到纯值列表
运行后改进部分的输出会是:
=== 改进后的输出(纯值) === 分组:组1 ['one', 'two'] 分组:组2 ['three', 'four'] 分组:组3 ['five']
这些方法的核心就是直接提取Series中的值部分,完全不依赖索引的位置或连续性,完美解决你的问题!
内容的提问来源于stack exchange,提问作者Atihska
相关产品推荐
相关产品推荐

