通过数字循环简化线条

Simplify lines with loop over numbers

设置

我通过以下行将 pandas 数据帧 radf 中的特定列分配给新数据帧 fdf

fdf['avg rent pcm,<br> 1R'] = radf['avg rent pcm'][1]   
fdf['median rent pcm,<br> 1R'] = radf['median rent pcm'][1]  
fdf['# for rent,<br> 1R'] = radf['# for rent'][1]   

fdf['avg rent pcm,<br> 2R'] = radf['avg rent pcm'][2]  
fdf['median rent pcm,<br> 2R'] = radf['median rent pcm'][2]   
fdf['# for rent,<br> 2R'] = radf['# for rent'][2]  

问题

我想用一个循环来简化上面几行。例如Stata 这很简单。但是,对于 Python 我从来没有成功过。

我见过有人这样做,

for i in range(1,2):
     fdf['avg rent pcm,<br> {i}R'] = radf['avg rent pcm'][{i}]   
     fdf['median rent pcm,<br> {i}R'] = radf['median rent pcm'][{i}]  
     fdf['# for rent,<br> {i}R'] = radf['# for rent'][{i}]   

但这不起作用。

如何进行这项工作?

range 不包括停止索引,您应该在 LHS 上格式化字符串:

for i in range(1, 3):
    fdf['avg rent pcm,<br> {i}R'.format(i=i)] = radf['avg rent pcm'][i]  

在 RHS 上,您不应从索引创建集合,而应直接使用它。

如果在 Python 3.6 上,您可以使用 f 字符串代替更冗长的 str.format:

for i in range(1, 3):
    fdf[f'avg rent pcm,<br> {i}R'] = radf['avg rent pcm'][i]
    ...