Sas*_*cha 5 python indexing for-loop pandas
说,我有以下数据框:
import pandas as pd
dict = {'val':[3.2, 2.4, -2.3, -4.9, 3.2, 2.4, -2.3, -4.9, 2.4, -2.3, -4.9],
'label': [0, 2, 1, -1, 1, 2, -1, -1,1, 1, -1]}
df = pd.DataFrame(dict)
df
val label
0 3.2 0
1 2.4 2
2 -2.3 1
3 -4.9 -1
4 3.2 1
5 2.4 2
6 -2.3 -1
7 -4.9 -1
8 2.4 1
9 -2.3 1
10 -4.9 -1
Run Code Online (Sandbox Code Playgroud)
我想在列标签中的 -1 值之前取每 n(例如 2)行。在给定的 df 中,首先 -1 出现在索引 3 处,我们取它之前的 2 行并删除索引 3,然后下一个 -1 出现在索引 6 处,我们再次保留之前的 2 行等等。所需的输出如下:
val label
1 2.4 2
2 -2.3 1
4 3.2 1
5 2.4 2
6 -2.3 -1
8 2.4 1
9 -2.3 1
Run Code Online (Sandbox Code Playgroud)
感谢您的任何想法!
您可以获取index值,然后获取前两行索引值:
idx = df[df.label == -1].index
filtered_idx = (idx-1).union(idx-2)
filtered_idx = filtered_idx[filtered_idx > 0]
df_new = df.iloc[filtered_idx]
Run Code Online (Sandbox Code Playgroud)
输出:
val label
1 2.4 2
2 -2.3 1
4 3.2 1
5 2.4 2
6 -2.3 -1
8 2.4 1
9 -2.3 1
Run Code Online (Sandbox Code Playgroud)
与解决方案的速度比较for loop:
val label
1 2.4 2
2 -2.3 1
4 3.2 1
5 2.4 2
6 -2.3 -1
8 2.4 1
9 -2.3 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |