使用函数循环执行几个命令

时间:2021-01-13 22:26:42

标签: python pandas

我有一个循环,我经常收到错误消息。

print(((df1['col1_df'] == 0) & (df1['col2_df'] == True)).sum())
print(((df1['col1_df'] == 0) & (df1['col3_df'] == True)).sum())
print(((df1['col1_df'] == 0) & (df1['col4_df'] == True)).sum())
print(((df1['col1_df'] == 0) & (df1['col5_df'] == True)).sum())

print(((df2['col1_df'] == 0) & (df2['col2_df'] == True)).sum())
print(((df2['col1_df'] == 0) & (df2['col3_df'] == True)).sum())
print(((df2['col1_df'] == 0) & (df2['col4_df'] == True)).sum())
print(((df2['col1_df'] == 0) & (df2['col5_df'] == True)).sum())

我想通过一个函数循环它们。

到目前为止我有:

for i in range (2,5):
    col = "col{}_df".format(i)
    print(((df['col'] == 0) & (df['col'] == 2)).sum())

如何给 df 编号并让 df 通过 1、2、3、4(如 df1、df2 df3)

2 个答案:

答案 0 :(得分:1)

col 是一个变量。 'col' 是一个字符串。拥有 df['col'] 并不指代变量 col

您的字符串格式有误:col = "col{}_df".format(i)

另外,range(2,5) 会给你 [2,5) 而不是 [2,5]。它不包括在内。

答案 1 :(得分:0)

您可以使用推导式将整个代码表达为两行:

print(*( ((df1[f'col1_df'] == 0) & (df1[f'col{i}_df'] == True)).sum() for i in range(2,6) ), sep="\n")
print(*( ((df2[f'col1_df'] == 0) & (df2[f'col{i}_df'] == True)).sum() for i in range(2,6) ), sep="\n")

表达式 ((df1[f'col1_df'] == 0) & (df1[f'col{i}_df'] == True)).sum() for i in range(2,6) ) 创建一个生成器对象,一一生成 4 个表达式。

* 散布此生成器中的元素并将参数传递给 print,就像传递逗号分隔的参数列表一样。 end=\n 确保在输出时这些参数中的每一个都由一个新行分隔。