是否有更有效的方法多次调用具有不同参数的函数?

时间:2016-12-21 16:27:45

标签: python python-2.7 loops pandas for-loop

目前我有以下函数迭代Pandas DataFrame(df)列并创建一个计数:

def my_function(my_argument):
    count = 0
    for i, row in df.iterrows(): 
        if row['MyColumn'] == my_argument:
            count += row['MyScore']
    return count

我有很多参数要分配给/调用函数 - 现在,我正在做以下事情:

c = my_function('My_String1')
p = my_function('My_String13')
l = my_function('My_String342')
d = my_function('My_String14')
a = my_function('My_String49')
t = my_function('My_String553')
q = my_function('My_String42')
e = my_function('My_String99')
x = my_function('My_String123')
... ETC...

这样做,效果很好,但我想知道是否有更实用/有效的方法可以达到相同的结果。

我在考虑添加变量名称,例如cpld等列表并形成某种循环 - 如果 甚至可以工作......

因此,可能有点像:

for variable_name in list_of_variables:
    # ??? ... But I'm unaware of what would go here.

或者,是否有使用Pandas的方法?

4 个答案:

答案 0 :(得分:4)

Pandas有一个内置的方法,value_counts,它的工作方式类似于groupby,但如果你只想要计数,则跳过不需要的东西:

perl -i -pe's/"AcqDateTime":\s*+\K([^\s",]+)/"$1"/g' t.json

从那里,您可以过滤掉那些您不想计算的值(或者在value_counts()调用之前执行此操作)。

答案 1 :(得分:2)

map(lambda x: my_function(x), list_of_variables)

答案 2 :(得分:1)

我建议您尝试使用DataFrame支持的groupby

但如果您更喜欢调用自定义函数,我建议将函数参数添加到stringList = ["My_String1", "My_String13", ..]

等数组中
stringList = ["My_String1", "My_String13", ".."]
results = map(my_function, stringList)

map使用列表my_function

中的每个项目迭代调用stringList函数

返回值将存储在results列表中。

答案 3 :(得分:0)

您可以将结果存储在dict而不是本地变量中。然后你可以很容易地使用循环:

results = {}
for var, n in (('c', 1),
               ('p', 13),
               ('l', 342),
              ):
    results[var] = my_function('My_String%d' % n)