【问题标题】:Pandas - consecutive values must be different [duplicate]熊猫 - 连续值必须不同[重复]
【发布时间】:2014-12-09 12:32:56
【问题描述】:

我想对数据帧的行进行子采样,使得给定列中的所有连续值对都不同,如果其中两个相同,则保留第一个。

这是一个例子

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个连续值都是不同的。

【问题讨论】:

    标签: python pandas dataframe distinct-values subsampling


    【解决方案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 的每个条目是否与前一个条目不同,返回一个布尔值。

    此方法适用于具有任意数量连续条目的列:例如如果运行三个相同的值,则只返回该运行中的第一个值。

    【讨论】:

    • 如果您有 3 个连续相同的值,这会起作用吗?
    • @BaronYugovich 是的 - 它可以通过使用 & 并更改移位值来概括,例如df[(df.p != df.p.shift(1)) & (df.p != df.p.shift(2))]
    • 请在我接受之前增加您的答案。目前,它并没有真正解决我的问题。我想要的是数据框中的所有连续值对都不同,而您当前的答案没有实现。
    • 但这不是他的回答吗?通过使用上述方法,返回一个基本上没有连续重复的数据帧。他的结果也完全符合您想要的输出。究竟什么没有实现?
    • 其实是的,@Nanashi 是正确的......没有必要使用其他班次。该方法仅返回一系列连续条目中的第一个条目。
    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2020-05-09
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多