Python 折叠系列中相同的相邻行
基本上,如果my pandas dataframe的一列如下所示:Python 折叠系列中相同的相邻行,python,pandas,Python,Pandas,基本上,如果my pandas dataframe的一列如下所示: [1 1 1 2 2 2 3 3 3 1 1] 我想把它变成以下内容: [1 2 3 1] x = pandas.Series([1 1 1 2 2 2 3 3 3 1 1]) y = x-x.shift(1) y[0] = 1 result = x[y!=0] 您可以编写一个简单的函数,在系列元素之间循环,只存储运行中的第一个元素。 据我所知,熊猫没有内置的工具来实现这一点。但是,它不是很多代码来做自己 import p
[1 1 1 2 2 2 3 3 3 1 1]
我想把它变成以下内容:
[1 2 3 1]
x = pandas.Series([1 1 1 2 2 2 3 3 3 1 1])
y = x-x.shift(1)
y[0] = 1
result = x[y!=0]
您可以编写一个简单的函数,在系列元素之间循环,只存储运行中的第一个元素。
据我所知,熊猫没有内置的工具来实现这一点。但是,它不是很多代码来做自己
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 2 3 1]
x = pandas.Series([1 1 1 2 2 2 3 3 3 1 1])
y = x-x.shift(1)
y[0] = 1
result = x[y!=0]
您可以使用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])
您可以使用
shift
创建布尔掩码,将该行与前一行进行比较:
In [67]:
s = pd.Series([1,1,2,2,2,2,3,3,3,3,4,4,5])
s[s!=s.shift()]
Out[67]:
0 1
2 2
6 3
10 4
12 5
dtype: int64
顺序重要吗?您是在使用数据帧还是系列?我不想要唯一的元素。参见上面的修订示例。并假设数据帧只有一列。