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

2024-03-29 05:12:36 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我有以下函数,它遍历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等,并形成某种循环-If。。。你知道吗

因此,也许有点像:

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

或者,有没有使用熊猫的方法?你知道吗


Tags: of方法函数indataframepandasdffor
3条回答

Pandas有一个内置的方法,value\u counts,它的工作原理类似于groupby,但是如果你只想要counts,它会跳过非索引的内容:

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\u counts()调用之前进行)。你知道吗

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

我建议您尝试DataFrame支持的groupby

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

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

map用列表中的每个项迭代调用my_function函数stringList

返回值将存储在results列表中。你知道吗

相关问题 更多 >