我有如下所示的df(示例)
index y z
0 118 .
1 118 .
2 118 .
3 116
4 116
5 110
6 110
7 104
8 104
.
.
.
.
.
320 3 .
321 3 .
322 3
323 7
324 7
328 11
329 11
.
.
.
350 25
351 25
正如您在column y
中看到的那样,值从118
开始,一直保持在decreasing
的索引number 3
上。再次使322
与increasing
保持距离,并在index 323 of value 7
达到25
的值
您还可以在y列中找到重复的值。 (index 351.
)
我想分割该df的第一部分。(118 repeated thrice, 116 repeated twice and so on....
3)
即Value from 118 to
。
我的df外观
from index 0 till 322
我认为应该有一种替代的pythonic方式,使它更容易。 (内置函数或使用index y z
0 118 .
1 118 .
2 118 .
3 116
4 116
5 110
6 110
7 104
8 104
.
.
.
.
.
320 3 .
321 3 .
322 3
),将不胜感激。
答案 0 :(得分:3)
使用df
作为输入数据帧和序列中的索引-0,1,..
,您可以-
df.iloc[:(df.y.shift()<df.y).idxmax()[0]]
对于通用索引格式,您可以-
df.iloc[:(df.y.shift()<df.y).to_numpy().argmax()]
样品运行-
In [106]: df
Out[106]:
y z
7 118 0.149675
8 118 0.386489
9 3 0.449950
10 3 0.902349
11 8 0.969809
12 11 0.170910
In [107]: df.iloc[:(df.y.shift()<df.y).to_numpy().argmax()]
Out[107]:
y z
7 118 0.149675
8 118 0.386489
9 3 0.449950
10 3 0.902349
我们还可以对数组数据使用切片-
In [108]: a = df.y.to_numpy().ravel()
In [109]: df.iloc[:(a[:-1] < a[1:]).argmax()+1]
Out[109]:
y z
7 118 0.149675
8 118 0.386489
9 3 0.449950
10 3 0.902349
或者,用np.diff
代替移位比较-
In [110]: df.iloc[:(np.diff(a)>0).argmax()+1]
Out[110]:
y z
7 118 0.149675
8 118 0.386489
9 3 0.449950
10 3 0.902349
答案 1 :(得分:0)
您可以通过以下命令获取所需切片的副本:
df_copy = df.iloc[0:322]