Arrays Python:在函数中附加一个包含已计算为true的元素的列表
我有一个功能:Arrays Python:在函数中附加一个包含已计算为true的元素的列表,arrays,pandas,dataframe,Arrays,Pandas,Dataframe,我有一个功能: def mini_distance(pace_data, activity_id): condition_count = 0 false_count = 0 true_count = 0 list_of_classified_sessions = [] print(activity_id) #Condition 1 condition_count += 1 #between 4500M and 15000M
def mini_distance(pace_data, activity_id):
condition_count = 0
false_count = 0
true_count = 0
list_of_classified_sessions = []
print(activity_id)
#Condition 1
condition_count += 1
#between 4500M and 15000M
if(len(pace_data) in range(45,180)):
print("1. Array length fits between X and Y: ",len(pace_data)*100,"M.")
true_count+=1
else:
print("1. Array too short or too long: ",len(pace_data)*100,"M.")
false_count+=1
if(true_count == 1):
list_of_classified_sessions.append(activity_id)
print(list_of_classified_sessions)
我的任务:
检查数组是否包含一定数量的元素。如果为true,则将该数组的索引附加到列表中,如果不是,则检查下一个数组。对位于DataFrame列中的许多阵列执行此操作
参数
array([ 0. , 4.91101813, 5.58028665, 5.55841138,
5.22151485, 5.30403077, 5.68089541, 4.6237671 ,
5.52696382, 5.26733118])
index of 80
数组长度是否在X和Y之间
如果是,请将1添加到true_count变量。否则,将1添加到false_count变量
分类会话的列表存储这些索引值
示例
mini_distance(example_array, example_index)
返回包含该数组在数据帧中的索引位置的列表:
1. Array length fits between X and Y
[80]
如果数组在指定的元素之间不包含多个元素,则返回空列表:
1. Array length too short or too long.
[]
到目前为止正确
我的尝试
代码
输出
所需输出
包含所有数据帧行的索引的列表,其中数组在指定的行之间有许多元素:
output_list = [2,4,5,99,121,389,...,2112,3116]
我希望我已经说清楚了。如果需要,请要求进一步澄清。您的代码会生成5个单独的分类会话列表,每次调用函数时都有一个条目,因为变量是在函数内部分配的,而不是在函数外部分配的 要获得单个循环,请将函数外部的会话列表定义为循环的输出 您可以通过更改函数来实现这一点,使其结构如下:
def mini_distance(pace_data, activity_id):
condition_count = 0
false_count = 0
true_count = 0
#list_of_classified_sessions = []
#You don't need to create the list within the function
print(activity_id)
#Condition 1
condition_count += 1
#between 4500M and 15000M
if(len(pace_data) in range(45,180)):
print("1. Array length fits between X and Y: ",len(pace_data)*100,"M.")
true_count+=1
else:
print("1. Array too short or too long: ",len(pace_data)*100,"M.")
false_count+=1
if(true_count == 1):
return activity_id
然后设置循环以创建5个函数调用的输出列表
list_of_outcomes = [mini_distance(df.iloc[i].column_with_arrays, df.iloc[i].index_of_same_row) for i in range(5)]
这将产生一个标记为“true”的值的单一输出列表。而且,列表理解总是很好的;) 您的代码生成5个单独的分类会话列表,每次调用函数时都有一个条目,因为变量是在函数内部分配的,而不是在函数外部分配的 要获得单个循环,请将函数外部的会话列表定义为循环的输出 您可以通过更改函数来实现这一点,使其结构如下:
def mini_distance(pace_data, activity_id):
condition_count = 0
false_count = 0
true_count = 0
#list_of_classified_sessions = []
#You don't need to create the list within the function
print(activity_id)
#Condition 1
condition_count += 1
#between 4500M and 15000M
if(len(pace_data) in range(45,180)):
print("1. Array length fits between X and Y: ",len(pace_data)*100,"M.")
true_count+=1
else:
print("1. Array too short or too long: ",len(pace_data)*100,"M.")
false_count+=1
if(true_count == 1):
return activity_id
然后设置循环以创建5个函数调用的输出列表
list_of_outcomes = [mini_distance(df.iloc[i].column_with_arrays, df.iloc[i].index_of_same_row) for i in range(5)]
这将产生一个标记为“true”的值的单一输出列表。而且,列表理解总是很好的;)
增加了索引4,但索引2到哪里去了
你好,默里
这实际上是一个声明范围问题。您在最小距离功能中声明了您的分类会话列表,这意味着它不能从该功能范围之外访问,因此,它的值不能在两次函数调用之间保存:这解释了为什么每次调用函数时数组都初始化为0
要实现所需的功能,只需在函数外部声明此数组并将其标记为全局
例如:
list_of_classified_sessions=[]已声明全局数组
def最小距离(速度数据、活动id):
全局列表_of_classified_sessions#现在您可以修改此函数中的全局数组
条件_计数=0
错误计数=0
真计数=0
打印(活动标识)
#条件1
条件_计数+=1
#4500米到15000米之间
如果(len(配速数据)在范围(45180))内:
打印(“1.X和Y之间的数组长度:,len(步距数据)*100,“M.”)
真计数+=1
其他:
打印(“1.数组太短或太长:”,len(步调数据)*100,“M.”)
错误计数+=1
如果(真计数==1):
已分类会话的列表。追加(活动id)
打印(分类会话列表)
这应该是你想要的。如果有更多问题,请随时提问
史密斯
增加了索引4,但索引2到哪里去了
你好,默里
这实际上是一个声明范围问题。您在最小距离功能中声明了您的分类会话列表,这意味着它不能从该功能范围之外访问,因此,它的值不能在两次函数调用之间保存:这解释了为什么每次调用函数时数组都初始化为0
要实现所需的功能,只需在函数外部声明此数组并将其标记为全局
例如:
list_of_classified_sessions=[]已声明全局数组
def最小距离(速度数据、活动id):
全局列表_of_classified_sessions#现在您可以修改此函数中的全局数组
条件_计数=0
错误计数=0
真计数=0
打印(活动标识)
#条件1
条件_计数+=1
#4500米到15000米之间
如果(len(配速数据)在范围(45180))内:
打印(“1.X和Y之间的数组长度:,len(步距数据)*100,“M.”)
真计数+=1
其他:
打印(“1.数组太短或太长:”,len(步调数据)*100,“M.”)
错误计数+=1
如果(真计数==1):
已分类会话的列表。追加(活动id)
打印(分类会话列表)
这应该是你想要的。如果有更多问题,请随时提问
J.Smith您需要使用此功能吗?如果没有,我想结果可以通过
s\u len=df.column\u with_arrays.str.len()
然后output\u list=df.index[(s\u len>=45)和(s\u len你需要使用这个函数吗?如果没有,我想结果可以通过s\u len=df.column\u with_arrays.str.len()
然后output\u list=df.index[(s\u len>=45)获得及(s_len)