Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
TypeError:zip参数#1必须支持Python中的迭代_Python_Python 3.x_Pandas_Numpy_Pandas Groupby - Fatal编程技术网

TypeError:zip参数#1必须支持Python中的迭代

TypeError:zip参数#1必须支持Python中的迭代,python,python-3.x,pandas,numpy,pandas-groupby,Python,Python 3.x,Pandas,Numpy,Pandas Groupby,我试图编写代码,在值从0变为1时查找两个索引,并将该值保存在名为idx的变量中。然后,应该提取和处理索引前后的两行。提取行的代码如下所示: df1=pd.DataFrame({'A':[1,3,4,7,8,11,1,15,20,15,16,87], 'B':[1,3,4,6,8,11,1,19,20,15,16,87], 'flag':[0,0,0,0,1,1,1,0,0,1,0,0]}) N = 2 s =

我试图编写代码,在值从0变为1时查找两个索引,并将该值保存在名为
idx
的变量中。然后,应该提取和处理索引前后的两行。提取行的代码如下所示:

df1=pd.DataFrame({'A':[1,3,4,7,8,11,1,15,20,15,16,87],
                 'B':[1,3,4,6,8,11,1,19,20,15,16,87],
                 'flag':[0,0,0,0,1,1,1,0,0,1,0,0]})
         
N = 2
s = [x for s, e in zip(idx-N,idx) for x in range(s, e+1)]
df_before_2rows=df1.loc[df1.index.intersection(s)]
这很有效。但是,如果我在一个for循环中运行它,该循环逐个处理每个索引,那么我会得到一个错误:

df1=pd.DataFrame({'A':[1,3,4,7,8,11,1,15,20,15,16,87],
                     'B':[1,3,4,6,8,11,1,19,20,15,16,87],
                     'flag':[0,0,0,0,1,1,1,0,0,1,0,0]})

for item in idx:
    N = 2
    s = [x for s, e in zip(item-N,item) for x in range(s, e+1)]
    df_before_2rows=df1.loc[df1.index.intersection(s)]

主要目标是在标志从0变为1之前获得两行并进行处理,然后下一步检查标志是否从0变为1,然后执行上述操作,您可以使用
groupby
diff
cumsum
选择不同的方法:

df = pd.DataFrame({'A':[1,3,4,7,8,11,1,15,20,15,16,87],
                 'B':[1,3,4,6,8,11,1,19,20,15,16,87],
                 'flag':[0,0,0,0,1,1,1,0,0,1,0,0]})

for _, i in df.groupby(df["flag"].shift(1).diff().eq(1).cumsum()):
    if i["flag"].eq(1).any(): # this is done to skip the last group with no flag of 1
        print (i.tail(3))
        # do your thing with i.tail(3)...
使用原始方法进行编辑:

idx = [4,8] # I assume you retrieved the idx already

for item in idx:
    N = 2
    df_before_2rows=df.loc[range(item-N,item+1)]
    print (df_before_2rows)

item
idx
的一个元素
item-N
也只是一个数字,因此是错误的

for item in idx:
    N = 2
    s = [x for s, e in zip(item-N,item) for x in range(s, e+1)]
简化为:

for item in idx:
    N = 2
    # s = [x for x in range(item-N, item+1)]
    s = list(range(item-N, item+1))
    # s = np.arange(item-N, item+1)

您的预期输出是什么?@Henry Yik,我想使用我自己的方法,只想知道在哪里需要更改代码来删除idx中项目的类型错误
迭代idx中的项目,这些项目应该是
int
。你不能
zip
an
int
。只要做
range(item-N,item+1)
就能达到你想要的@Edward。
for item in idx:
    N = 2
    # s = [x for x in range(item-N, item+1)]
    s = list(range(item-N, item+1))
    # s = np.arange(item-N, item+1)