繁体   English   中英

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

[英]Is there a more efficient way to call functions with different arguments multiple times?

目前我有以下函数迭代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有一个内置的方法,value_counts,它的工作方式类似于groupby,但如果你只想要计数,则跳过不需要的东西:

import pandas as pd
df = pd.DataFrame({'x':['a','b','c','d','a','a']})
df.x.value_counts()


a    3
b    1
d    1
c    1
Name: x, dtype: int64

### using groupby:

df.groupby('x').size()

x
a    3
b    1
c    1
d    1
dtype: int64

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

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

我建议你尝试groupby通过数据框支持

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

stringList = ["My_String1", "My_String13", ".."]
results = map(my_function, stringList)

map使用列表stringList每个项迭代地调用my_function函数

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM