迭代Python中的操作的字符串列表

时间:2018-01-18 14:41:55

标签: python string python-3.x function loops

我试图在Python 3.6.1中做一个涉及字符串列表的相当简单的循环。基本上,我有一个如下所示的数据框:

      X_out  Y_out  Z_in  X_in  Y_in  Z_in      
Year                                                                
1969    4     3     4      4     3     3
1970    2     0     1      3     2     2
1971    3     1     1      0     1     2
1972    2     0     0      3     1     0

我希望找到X,Y和Z的净变化,使其成为此数据框中的新列。

最简单的形式可能是

df['x_net'] = df['x_in'] - df['x_out']
df['y_net'] = df['y_in'] - df['y_out']
df['z_net'] = df['z_in'] - df['z_out']

但实际上,需要以这种方式创建大约15列。因为它是一只熊,所以我认为最好放入一个函数,或者至少是一个循环。我列出了我们的初始" root"变量,没有看起来像这样的后缀:

root_vars = ['x', 'y', 'z']

我认为我的代码可能(?)看起来像:

for i in root_vars:
    df['%s_net'] = df['%s_in'] - df['%s_out'] %(root_vars_[i])

但这绝对不对。有人可以帮我一把吗?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

您可以使用相对较新的(Python 3.6formatted string literals

for i in root_vars:
    df[f'{i}_net'] = df[f'{i}_in'] - df[f'{i}_out']

每个字符串前面的f前缀会导致{i}替换为变量i的值。如果您希望代码在3.6之前的Python版本中可用,您可以使用更常用的格式:

for i in root_vars:
    df['{}_net'.format(i)] = df['{}_in'.format(i)] - df['{}_out'.format(i)]