如何从pandas DataFrame按3行分组生成指定格式字典列表
你可以用pandas自带的分组聚合操作实现需求,代码逻辑简单,且针对1000行级别的数据运行效率极高:
默认连续整数索引场景代码
如果你的DataFrame是默认的0开始连续整数索引,直接用索引整除3作为分组键即可:
import pandas as pd # 你的原始DataFrame df = pd.DataFrame({'sym': ['a', 'b', 'c', 'x', 'y', 'z', 'q', 'w', 'e'], 'sym_t': ['tsla', 'msft', 'f', 'aapl', 'aa', 'gg', 'amd', 'ba', 'c']}) # 按每3行分组,拼接后转成目标格式的字典列表 options = df.groupby(df.index // 3) \ .agg(value=('sym', ' '.join), label=('sym_t', ' '.join)) \ .to_dict('records')
兼容任意索引场景代码
如果你的DataFrame索引不是默认的连续整数,改用全局行号作为分组依据即可,兼容性更强:
import pandas as pd import numpy as np df = pd.DataFrame({'sym': ['a', 'b', 'c', 'x', 'y', 'z', 'q', 'w', 'e'], 'sym_t': ['tsla', 'msft', 'f', 'aapl', 'aa', 'gg', 'amd', 'ba', 'c']}) # 用行号整除3作为分组键,不受原索引影响 options = df.groupby(np.arange(len(df)) // 3) \ .agg(value=('sym', ' '.join), label=('sym_t', ' '.join)) \ .to_dict('records')
运行结果
最终得到的options完全符合你要求的格式:
[ {'value': 'a b c', 'label': 'tsla msft f'}, {'value': 'x y z', 'label': 'aapl aa gg'}, {'value': 'q w e', 'label': 'amd ba c'} ]
如果总行数不是3的整数倍,最后一组会自动保留剩余的1-2行拼接结果,不需要额外处理。
内容的提问来源于stack exchange,提问作者AmirX
相关产品推荐
相关产品推荐

