![](/img/trans.png)
[英]Is there a way to call Variables file multiple times with different arguments and have it override the previous call?
[英]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...
这样做,工作得很好,但我想知道是否有更实用/有效的方法可以达到相同的结果。
我正在考虑将变量名称,例如c
, p
, l
, d
等添加到列表中并形成某种循环 - 如果这甚至可以工作......
因此,也许有点像:
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.