保留熊猫数据框的重复列的第一行和最后一行的值

时间:2020-05-18 22:26:51

标签: python pandas dataframe

我有一个这样的数据框,

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循环并迭代下一行来执行此操作,但是使用它执行时间会更多。寻找一些熊猫快捷方式/ pythonic方式最有效地完成此任务。

2 个答案:

答案 0 :(得分:4)

让我们尝试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

答案 1 :(得分:0)

groupby的nth方法也可以正常工作,如@ Andy.L建议:

#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