我在 pandas 中得到了下表:
x | 是 |
---|---|
1 | 1 |
2 | 3 |
2 | 5 |
2 | 4 |
1 | 4 |
1 | 5 |
我想看看变量x
的模式,所以我想看看模式是什么。
在表格中,您会看到 x=1 然后 x=2 三次,然后返回 x=1 两次。
x | # 发生次数 | 第一个 y 值 | 最后一个 y 值 |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | 3 | 3 | 4 |
1 | 2 | 4 | 5 |
我最初尝试了 groupby
,但使用 groupby 会将所有 x 组合在一起,这不是我们想要的方式。
为方便起见,我应该提供数据框的内容。
data = {'x': [1, 2, 2, 2, 1, 1],
'y': [1, 3, 5, 4, 4, 5]}
df = pd.DataFrame(data)
提前致谢。
最佳答案
这是一个孤岛问题。我们首先需要通过获取 index
并减去该 x
组的 cumcount
来将 x 值分组为岛:
group = df.index - df.groupby('x').cumcount()
输出:
0 0
1 1
2 1
3 1
4 3
5 3
dtype: int64
我们现在可以按该变量进行分组,为所需的输出添加适当的函数列表:
df.groupby(group).agg({'x':[('x', 'first'), ('# occurrence', 'size')], 'y':[('first y', 'first'), ('last y', 'last')]}).reset_index(drop=True)
输出:
x y
x # occurrence first y last y
0 1 1 1 1
1 2 3 3 4
2 1 2 4 5
取决于您的 pandas 版本 (>=0.25),您还可以使用 dict 来指定聚合:
df.groupby(group).agg(**{ 'x' :('x', 'first'), '# occurrence':('x', 'count'), 'first y':('y', 'first'), 'last y':('y', 'last')})
输出:
x # occurrence first y last y
0 1 1 1 1
1 2 3 3 4
3 1 2 4 5
关于python - 创建 pandas 汇总表(但不是 groupby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72780719/