看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
假定我们有一个指定长度的数字序列,需要n个一组转到列上,为了方便操作讲解,序列长度定为20,分组数为5,选构造数据:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20), columns=['A'])
df.tail(4)
'''
A
16 16
17 17
18 18
19 19
'''
我们的思路是,增加一个辅助列,索引除以5,只取整数,就得到分组的标识:
(
df.assign(B=df.index/5) # 增加辅助列,索引除以5
.astype({'B': int}) # 取整数
)
'''
A B
0 0 0
1 1 0
2 2 0
3 3 0
4 4 0
5 5 1
6 6 1
7 7 1
8 8 1
9 9 1
10 10 2
11 11 2
12 12 2
13 13 2
14 14 2
15 15 3
16 16 3
17 17 3
18 18 3
19 19 3
'''
得到的B列为分组的标识,然后用这个标识进行分组,利用分组对象的groups方法得到一个字典形式的分组数据,将这个字典赋值给一个变量:
groups = (
df.assign(B=df.index/5) # 增加辅助列,索引除以5
.astype({'B': int}) # 取整数
.groupby('B') # 分组
.groups # 分组数据
)
groups
# {0: [0, 1, 2, 3, 4], 1: [5, 6, 7, 8, 9], 2: [10, 11, 12, 13, 14], 3: [15, 16, 17, 18, 19]}
最后,直接将字典放入pd.DataFrame()得到最终结果:
pd.DataFrame(groups)
'''
0 1 2 3
0 0 5 10 15
1 1 6 11 16
2 2 7 12 17
3 3 8 13 18
4 4 9 14 19
'''
还可以用 NumPy 中的 reshape 方法:
pd.DataFrame(df.A.to_numpy().reshape(4, 5).T)
(完)
更新时间:Aug. 18, 2024, 3:41 p.m. 标签:pandas python 序列