我想对数据帧的行进行子采样,使得给定列中的所有连续值对都不同,如果其中2个相同,则保留,比如第一个。
这是一个例子
p = [1,1,2,1,3,3,2,4,3]
t = range(len(p))
df = pd.DataFrame({'t':t, 'p':p})
df
p t
0 1 0
1 1 1
2 2 2
3 1 3
4 3 4
5 3 5
6 2 6
7 4 7
8 3 8
desiredDf
p t
0 1 0
2 2 2
3 1 3
4 3 4
6 2 6
7 4 7
8 3 8
在desiredDf中,p列中的所有2个连续值都不同。
答案 0 :(得分:1)
这个怎么样?
>>> df[df.p != df.p.shift()]
p t
0 1 0
2 2 2
3 1 3
4 3 4
6 2 6
7 4 7
8 3 8
说明:df.p.shift()
将列p
的条目向下移动一行。 df.p != df.p.shift()
检查df.p
的每个条目是否与前一个条目不同,返回一个布尔值。
此方法适用于具有任意数量连续条目的列:例如如果存在三个相同值的运行,则仅返回该运行中的第一个值。