我想通过从Pandas 列返回第一个和最后一个连续的值来设置df的子集.Drop_duplciates不起作用,因为它不考虑连续分组.我使用的是.shift()(如下所示),但它只返回最后一个连续的值,即我想要的第一个和最后一个.

import pandas as pd

df = pd.DataFrame({"Item":['A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A'], 
           "Val1":[-20, -21, -20, -20, -20, -21, -20, -23, -22], 
           "Val2":[150, 151, 150, 148, 149, 150, 151, 150, 148]
           })

df1 = df[df['Item'].ne(df['Item'].shift())]

print(df1)

预期输出:

  Item  Val1  Val2
0    A   -20   150
2    A   -20   150
3    B   -20   148
6    B   -20   151
7    A   -23   150
8    A   -22   148

推荐答案

您需要与向前和向后移动的值进行比较,以便可以找到每组的开始和结束:

df1 = df[(df['Item'].ne(df['Item'].shift())) | 
         (df['Item'].ne(df['Item'].shift(-1)))]

输出:

  Item  Val1  Val2
0    A   -20   150
2    A   -20   150
3    B   -20   148
6    B   -20   151
7    A   -23   150
8    A   -22   148

Python相关问答推荐

如何根据条件在多指标框架上进行groupby

将numpy数组存储在原始二进制文件中

返回nxon矩阵的diag元素,而不使用for循环

DataFrame groupby函数从列返回数组而不是值

运行Python脚本时,用作命令行参数的SON文本

scikit-learn导入无法导入名称METRIC_MAPPING64'

C#使用程序从Python中执行Exec文件

我们可以为Flask模型中的id字段主键设置默认uuid吗

从spaCy的句子中提取日期

driver. find_element无法通过class_name找到元素'""

python中字符串的条件替换

使用特定值作为引用替换数据框行上的值

判断solve_ivp中的事件

网格基于1.Y轴与2.x轴显示在matplotlib中

ConversationalRetrivalChain引发键错误

Numpyro AR(1)均值切换模型抽样不一致性

Gekko中基于时间的间隔约束

根据客户端是否正在传输响应来更改基于Flask的API的行为

使用tqdm的进度条

一个telegram 机器人应该发送一个测验如何做?""