You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现:遍历DataFrame元组列并按分组循环赋值

问题描述

需要遍历DataFrame中以字符串形式存储的元组类型列,同一Group分组内的ID按顺序循环选取元组中的元素:第1个ID选取元组第1个元素,第2个ID选取元组第2个元素,后续ID循环往复;当Group分组变更时,对新分组重复该逻辑。也可先拆分至新DataFrame后再合并。

初始代码

import pandas as pd

df = pd.DataFrame({'ID':[1,2,3,4,5,6],
                   'Group':["('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Bird','Dog')",
                             "('Bird','Dog')",                             
                            ]
                  })

初始数据

IDGroup
1('Cat', 'Dog')
2('Cat', 'Dog')
3('Cat', 'Dog')
4('Cat', 'Dog')
5('Bird', 'Dog')
6('Bird', 'Dog')

期望结果

IDGroup
1Cat
2Dog
3Cat
4Dog
5Bird
6Dog
解决方案

可以通过以下步骤实现需求:

  1. 将字符串形式的元组转换为实际可迭代对象:用ast.literal_eval解析字符串,转成真实元组,避免eval的安全风险。
  2. 分组生成组内序号:按原始Group字符串分组,给每组内的行从0开始生成连续序号。
  3. 循环选取元素:用组内序号对元组长度取模,得到元素索引,实现循环选取。

完整代码如下:

import pandas as pd
import ast

# 初始数据
df = pd.DataFrame({'ID':[1,2,3,4,5,6],
                   'Group':["('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Cat','Dog')",
                             "('Bird','Dog')",
                             "('Bird','Dog')",                             
                            ]
                  })

# 解析字符串元组为实际元组
df['parsed_group'] = df['Group'].apply(ast.literal_eval)

# 分组后生成组内序号
df['group_idx'] = df.groupby('Group').cumcount()

# 按序号循环选取元组元素
df['Group'] = df.apply(lambda row: row['parsed_group'][row['group_idx'] % len(row['parsed_group'])], axis=1)

# 清理临时列
df = df.drop(['parsed_group', 'group_idx'], axis=1)

print(df)

运行后输出结果:

ID Group
0   1   Cat
1   2   Dog
2   3   Cat
3   4   Dog
4   5  Bird
5   6   Dog

补充说明

  • 代码适配不同长度的元组,无论分组内元组是2个还是更多元素,取模操作都会自动循环选取。
  • 无需拆分合并DataFrame,直接在原数据上处理,效率更高。

内容的提问来源于stack exchange,提问作者Shell Shock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:40:25