繁体   English   中英

Python - 在 dataframe 的“n”行开始循环?

[英]Python - Start loop at row 'n' in a dataframe?

我有这个 dataframe:

a = [0,0,5,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0]
b = [0,0,0,0,250,350,500,0,0,0,0,0,0,125,70,95,0,0]

df = pd.DataFrame(columns=['a', 'b'])
df = pd.DataFrame.assign(df, a=a, b=b)

df
    a   b
0   0   0
1   0   0
2   5   0
3   0   0
4   0   250
5   0   350
6   0   500
7   0   0
8   0   0
9   7   0
10  0   0
11  0   0
12  0   0
13  0   125
14  0   70
15  0   95
16  0   0
17  0   0

我想记录 B 列的第一个值,在每次迭代之后通过 A 列。我正在寻找这个结果:

5
250
7
125

我的第一次尝试是下面的循环。 我试图提取行索引,这样我就可以将它传递给下一个 for 循环,以在 n 索引处开始循环,但这并不完全符合我的预期。

for item in df.a:
    if item > 0:
        print(item)
        index = df.iterrows()
        print(index)
        
        for i in df.b:
            if i > 0:
                print(i)
                break

which yields:

5
<generator object DataFrame.iterrows at 0x000002C654B0EF20>
250
7
<generator object DataFrame.iterrows at 0x000002C654B01C80>
250

非常感谢有关如何处理此问题的建议!

不要循环。 您可以mask零,然后按 a 列中的块对ba分组,并first

s = df[df != 0]
s['b'].groupby(s['a'].ffill()).first()

a
5.0    250.0
7.0    125.0
Name: b, dtype: float64

另一种可能的解决方案:

df1 = df.mask(df.eq(0)).dropna(how='all')
df1.assign(b = df1['b'].shift(-1)).dropna()

Output:

     a      b
2  5.0  250.0
9  7.0  125.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM