目前我有以下函数迭代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的方法?
答案 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)