簡體   English   中英

保留熊貓數據框的第一行和最后一行重復列值

[英]Keep first and last rows of repetitive columns values of a panda data frame

我有一個這樣的數據框,

df
col1    col2    col3 
 1        A       P
 2        B       P
 3        C       P
 4        D       P
 5        E       Q
 6        F       Q
 7        G       Q
 8        H       P
 9        I       P
 10       J       P
 11       K       P

我想從上面創建一個具有以下條件的新數據框,如果 col3 值相同,只需保留重復 col3 值的第一行和最后一行。

所以最終的數據框看起來像,

df
col1    col2    col3 
 1        A       P
 4        D       P
 5        E       Q
 7        G       Q
 8        H       P
 11       K       P

我可以使用 for 循環並迭代下一行來執行此操作,但使用它執行時間會更長。 尋找一些 pandas 快捷方式/pythonic 方式來最有效地完成這項任務。

讓我們嘗試shiftcusmum創建組,然后我們duplicated

s=df.col3.shift().ne(df.col3).cumsum()
sdf=df[~(s.duplicated() & s.iloc[::-1].duplicated())].copy()
sdf
Out[219]: 
    col1 col2 col3
0      1    A    P
3      4    D    P
4      5    E    Q
6      7    G    Q
7      8    H    P
10    11    K    P

正如@Andy.L 建議的那樣, groupby 的第 n 個方法也可以工作:

#get cumulative on col3
df['col4'] = df.col3.ne(df.col3.shift()).cumsum()
df.groupby('col4',sort=False).nth([0,-1])

         col1 col2 col3
col4            
1           1   A   P
1           4   D   P
2           5   E   Q
2           7   G   Q
3           8   H   P
3           11  K   P

暫無
暫無

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

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