我在Pandas 中得到了下表:

x y
1 1
2 3
2 5
2 4
1 4
1 5

我希望看到变量x的模式,所以我希望看到模式.

在表中,您将看到x=1,然后x=2三次,然后返回x=1两次.

x # occurance first y value last y value
1 1 1 1
2 3 3 4
1 2 4 5

我最初try 了groupby,但使用groupby会将所有x分组在一起,这不是理想的方式.

为了方便起见,我应该提供dataframe的内容.

data = {'x': [1, 2, 2, 2, 1, 1],
        'y': [1, 3, 5, 4, 4, 5]}
df = pd.DataFrame(data)

提前谢谢.

推荐答案

使用:

g = (df['x'].shift(1, fill_value=df['x'].iloc[0])!=df['x']).cumsum()
from collections import Counter
df.groupby(g).agg({'x': [('x', lambda x: x.iloc[0]), ('# occurance', lambda x: list(Counter(x).values())[0])], 'y': [('first y value', lambda x: x.iloc[0]), ('last y value', lambda x: x.iloc[-1])]}).droplevel(level=0, axis=1)

输出:

   x    # occurance first y value   last y value
x               
0   1   1   1   1
1   2   3   3   4
2   1   2   4   5

Python相关问答推荐

使用numpy提取数据块

如何使用pandasDataFrames和scipy高度优化相关性计算

当多个值具有相同模式时返回空

'discord.ext. commanders.cog没有属性监听器'

删除字符串中第一次出现单词后的所有内容

在Python中动态计算范围

计算每个IP的平均值

如何使用SentenceTransformers创建矢量嵌入?

在matplotlib中删除子图之间的间隙_mosaic

Geopandas未返回正确的缓冲区(单位:米)

Maya Python脚本将纹理应用于所有对象,而不是选定对象

跳过嵌套JSON中的级别并转换为Pandas Rame

在matplotlib中使用不同大小的标记顶部添加批注

交替字符串位置的正则表达式

如果包含特定值,则筛选Groupby

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

用0填充没有覆盖范围的垃圾箱

如何关联来自两个Pandas DataFrame列的列表项?

迭代工具组合不会输出大于3的序列

组颠倒大Pandas 数据帧