Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Python:在函数中附加一个包含已计算为true的元素的列表_Arrays_Pandas_Dataframe - Fatal编程技术网

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)