[英]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 列中的块对b
列a
分组,并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.