Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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
如何在python中迭代数据帧,然后返回行值?_Python_Pandas_Loops_Dataframe - Fatal编程技术网

如何在python中迭代数据帧,然后返回行值?

如何在python中迭代数据帧,然后返回行值?,python,pandas,loops,dataframe,Python,Pandas,Loops,Dataframe,我有一个这样的数据框 import pandas as pd d = {'col1': ["2004-02-26", "2004-02-27", "2004-03-01", "2004-03-02", "2004-03-03", "2004-03-04", "2004-03-05", "2004-03-08", "2004-03-09", "2004-03-10", "2004-03-11", "2004-03-

我有一个这样的数据框

import pandas as pd
d = {'col1': ["2004-02-26", "2004-02-27", "2004-03-01",
              "2004-03-02", "2004-03-03", "2004-03-04",
              "2004-03-05", "2004-03-08", "2004-03-09",
              "2004-03-10", "2004-03-11", "2004-03-12"],
     'col2': [-3, 4, 5, 3, -1, 11, 123, 43, -5, 3, -4, -7],
     'col3': [0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0,]}
df = pd.DataFrame(data=d)
print(df)
打印出来

              col1  col2  col3
    0   2004-02-26    -3     0
    1   2004-02-27     4     1
    2   2004-03-01     5     0
    3   2004-03-02     3     0
    4   2004-03-03    -1     1
    5   2004-03-04    11     0
    6   2004-03-05   123     0
    7   2004-03-08    43     0
    8   2004-03-09    -5     0
    9   2004-03-10     3     1
    10  2004-03-11    -4     1
    11  2004-03-12    -7     0
您可以在
df['col2']
中看到,正值由两个负值分隔。我想选择每组正值的首行和尾行,以创建一个新的数据帧。如果只有一个正行留在中间的话,我假设头和尾是相同的。< /P> 比如说,

head_date  col2h  co3h    tail_date  col2t  col3t
2004-02-27     4     1     2004-03-02     3     0
2004-03-04    11     0     2004-03-08    43     0
2004-03-10     3     1     2004-03-10     3     1
我在想,当col20的第(I)行返回I+1行值时,以及当col2的第(I)行>0和col2的第(I+1)行时,选择这些行

df1 = df.loc[(df['col2'].shift() < 0) & (df['col2'] > 0)].copy()
df1.rename(columns = {'col1': 'head_date', 'col2': 'col2h', 'col3': 'col3h'}, inplace = True)

df2 = df.loc[(df['col2'].shift(-1) < 0) & (df['col2'] > 0)].copy()
df2.rename(columns = {'col1': 'head_date', 'col2': 'col2t', 'col3': 'col3t'})

new_df = pd.concat([df1.reset_index(drop = True), df2.reset_index(drop = True)], axis = 1)
    head_date   col2h   col3h   head_date   col2t   col3t
0   2004-02-27  4       1       2004-03-02  3       0
1   2004-03-04  11      0       2004-03-08  43      0
2   2004-03-10  3       1       2004-03-10  3       1