如何用优雅的增量式代码简化Pandas DataFrame中引用外部DataFrame的列赋值操作?
简化Pandas DataFrame列计算的优雅方案
嘿,这个场景我太熟悉了!你已经用列表推导式把Cluster列的自动编号玩得很溜,那咱们用同样的思路来简化Item per Population列的生成完全没问题~
核心思路:把分散的变量装进列表,用批量处理代替逐个引用
你现在的痛点是要手动写cluster_1、total_c1这种带编号的变量,本质是这些变量是同类型、有顺序关联的,那咱们直接把它们放进列表里,就能用列表推导式一次性处理:
- 先把所有cluster DataFrame和对应的total变量按顺序存入列表:
# 按Cluster 1、2、3的顺序把对应DataFrame和total变量放进列表 cluster_dfs = [cluster_1, cluster_2, cluster_3] total_values = [total_c1, total_c2, total_c3]
- 用
zip()把两个列表配对,再通过列表推导式批量计算:
results['Item per Population'] = [df.shape[0] / total for df, total in zip(cluster_dfs, total_values)]
这样一来,不管后续新增多少个cluster,你只需要往这两个列表里追加对应的元素就行,不用修改推导式的代码,扩展性拉满!
进阶优化:如果total值能从cluster DataFrame直接获取,连total列表都能省
要是total_c1这类变量其实是对应cluster DataFrame里的统计值(比如总人口是cluster_1['population'].sum()),那咱们可以直接在推导式里计算,连total列表都不用单独维护:
# 假设每个total_cX是对应cluster中population列的总和 results['Item per Population'] = [df.shape[0] / df['population'].sum() for df in cluster_dfs]
这种写法更简洁,也避免了手动维护total列表可能出现的顺序错误,简直完美~
内容的提问来源于stack exchange,提问作者warfo09
相关产品推荐
相关产品推荐

