Pandas循环调用局部变量问题及分组唯一值最优实现咨询
针对你的DataFrame分组获取唯一值问题的解决方案
嘿Juan,我来帮你搞定这两个问题!
1. 更Pythonic的实现方式(强烈推荐)
完全不需要手动创建一堆局部DataFrame,用pandas内置的groupby就能优雅解决需求,而且结果更易管理:
方法1:生成索引为Partida的Series
# 按"Nombre Partida"分组,提取每组"Nombre Capitulo"的唯一值 capitulos_por_partida = data1_anio.groupby('Nombre Partida')['Nombre Capitulo'].unique()
调用时直接通过索引访问即可:
# 获取指定Partida对应的所有唯一Capitulo capitulos_por_partida['你的Partida名称']
方法2:转换成字典(更直观的调用方式)
如果更喜欢用键值对的形式访问,可以把上面的Series转成字典:
capitulos_dict = capitulos_por_partida.to_dict() # 调用示例 capitulos_dict['你的Partida名称']
这种方式避免了创建大量零散变量,也不会出现变量名冲突或特殊字符导致的问题,是最符合Python风格的做法。
2. 修复你原代码的调用错误
你原来的代码报错是因为在获取Capitulo唯一值时,错误地用字符串列表代替了之前创建的局部DataFrame。修正后的代码如下:
Partidas = data1_anio['Nombre Partida'].unique() for p in Partidas: # 创建对应Partida的局部DataFrame locals()[f'{p}'] = data1_anio.loc[data1_anio['Nombre Partida'] == p] # 正确获取该DataFrame的Nombre Capitulo唯一值(关键修正) globals()[f'cap_{p}'] = locals()[f'{p}']['Nombre Capitulo'].unique()
不过要注意:如果你的Nombre Partida包含空格、特殊字符(比如/、!),用它作为变量名会非常麻烦,这也是为什么更推荐第一种groupby方法的原因。
内容的提问来源于stack exchange,提问作者Juan C
相关产品推荐
相关产品推荐

