首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >保留panda数据帧的第一行和最后一行重复列值

保留panda数据帧的第一行和最后一行重复列值
EN

Stack Overflow用户
提问于 2020-05-18 22:26:52
回答 2查看 31关注 0票数 2

我有一个像这样的数据框,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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值的第一行和最后一行。

所以最终的数据帧看起来是这样的,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df
col1    col2    col3 
 1        A       P
 4        D       P
 5        E       Q
 7        G       Q
 8        H       P
 11       K       P

我可以使用for循环来实现这一点,并使用下一行进行迭代,但是使用它执行时间会更长。寻找一些熊猫捷径/蟒蛇方式来最有效地完成这项任务。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-18 22:37:41

让我们尝试使用shiftcusmum创建组,然后执行duplicated

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
票数 4
EN

Stack Overflow用户

发布于 2020-05-19 03:09:31

groupby的nth方法也适用,@Andy.L建议:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61880051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文