在Pandas系列中折叠相同的相邻行

时间:2016-07-19 04:51:59

标签: python pandas

基本上,如果我的pandas数据框的列如下所示:

[1 1 1 2 2 2 3 3 3 1 1]

我希望将其转化为以下内容:

[1 2 3 1]

4 个答案:

答案 0 :(得分:1)

您可以编写一个简单的函数,循环遍历系列的元素,只存储运行中的第一个元素。

据我所知,pandas没有内置工具来执行此操作。但是自己做的不是很多代码。

import pandas
example_series = pandas.Series([1, 1, 1, 2, 2, 3])

def collapse(series):
    last = ""
    seen = []
    for element in series:
        if element != last:
            last = element
            seen.append(element)
    return seen

collapse(example_series)

在上面的代码中,您将遍历一个系列的每个元素,并检查它是否与最后看到的元素相同。如果不是,请存储它。如果是,请忽略该值。

如果需要将返回值作为一个系列处理,可以将函数的最后一行更改为:

return pandas.Series(seen)

答案 1 :(得分:1)

您可以编写执行以下操作的函数:

 Debug.Log(w.error); // place this before or after the other debug.log

答案 2 :(得分:1)

您可以使用DataFrame的差异和索引:

>>> df = pd.DataFrame([1,1,2,2,2,2,3,3,3,3,1])
>>> df[df[0].diff()!=0]
    0
0   1
2   2
6   3
10  1
>>> df[df[0].diff()!=0].values.ravel() # If you need an array
array([1, 2, 3, 1])

系列同样适用:

>>> df = pd.Series([1,1,2,2,2,2,3,3,3,3,1])
>>> df[df.diff()!=0].values
array([1, 2, 3, 1])

答案 3 :(得分:0)

您可以使用 Date WaterTemp 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 HWT 20 21 HWT 21 22 HWT 22 23 HWT 23 24 HWT 24 25 HWT 25 26 HWT 26 27 HWT 27 28 HWT 28 29 HWT 29 30 HWT 30 31 HWT 31 32 HWT 32 33 HWT 33 34 HWT 34 35 HWT 35 36 HWT 36 37 HWT 37 38 38 39 39 40 创建一个布尔掩码来比较该行与上一行:

shift