簡體   English   中英

如何從DataFrame Pandas動態刪除行

[英]How to dynamically remove rows from a DataFrame Pandas

我有以下NFL跟蹤數據:

    Event  PlayId  FrameId   x-coord  y-coord
0   Start       1       1       20.2     20.0
1     NaN       1       2       21.0     19.1
2     NaN       1       3       21.3     18.3
3     NaN       1       4       22.0     17.5
4     End       1       5       22.5     17.2
4     NaN       1       6       22.5     17.2
4     NaN       1       7       22.5     17.2
4     NaN       1       8       22.5     17.2
4     NaN       1       9       22.5     17.2
4     NaN       1       10      22.5     17.2
5     NaN       2       1       23.0     16.9
6   Start       2       2       23.6     16.7
7     End       2       3       25.1     34.1
8     NaN       2       4       25.9     34.2
10    NaN       3       1       22.7     34.2
11    Nan       3       2       21.5     34.5
12    NaN       3       3       21.1     37.3
13  Start       3       4       21.2     44.3
14    NaN       3       5       20.4     44.6
15    End       3       6       21.9     42.7

如何過濾此列表,以僅獲取“事件”列的“開始”和“結束”值之間的行? 為了澄清,這是我要過濾的數據:

    Event  PlayId  FrameId   x-coord  y-coord
0   Start       1       1       20.2     20.0
1     NaN       1       2       21.0     19.1
2     NaN       1       3       21.3     18.3
3     NaN       1       4       22.0     17.5
4     End       1       5       22.5     17.2
6   Start       2       2       23.6     16.7
7     End       2       3       25.1     34.1
13  Start       3       4       21.2     44.3
14    NaN       3       5       20.4     44.6
15    End       3       6       21.9     42.7

一個明確的解決方案將不起作用,因為實際的數據集非常大,並且無法預測起點和終點值的落差。

與片做的和ffill那么concat回來,你還在你的DF有南,它應該是NaN

df1=df.copy()

newdf=pd.concat([df1[df.Event.ffill()=='Start'],df1[df.Event=='End']]).sort_index()
newdf
    Event  PlayId  FrameId  x-coord  y-coord
0   Start       1        1     20.2     20.0
1     NaN       1        2     21.0     19.1
2     NaN       1        3     21.3     18.3
3     NaN       1        4     22.0     17.5
4     End       1        5     22.5     17.2
6   Start       2        2     23.6     16.7
7     End       2        3     25.1     34.1
13  Start       3        4     21.2     44.3
14    NaN       3        5     20.4     44.6
15    End       3        6     21.9     42.7

要么

newdf=df[~((df.Event.ffill()=='End')&(df.Event.isna()))]
newdf
    Event  PlayId  FrameId  x-coord  y-coord
0   Start       1        1     20.2     20.0
1     NaN       1        2     21.0     19.1
2     NaN       1        3     21.3     18.3
3     NaN       1        4     22.0     17.5
4     End       1        5     22.5     17.2
6   Start       2        2     23.6     16.7
7     End       2        3     25.1     34.1
13  Start       3        4     21.2     44.3
14    NaN       3        5     20.4     44.6
15    End       3        6     21.9     42.7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM