我有一个包含大量列的数据框。我真正想要的是 创建/拆分数据框。例如:
生成玩具数据:
df = pd.DataFrame(np.arange(10),columns = ['x'])
df['y'] = np.arange(30,40,1)
df['1'] = np.random.rand(10)
df['2'] = np.random.rand(10)
df['3'] = np.random.rand(10)
df['4'] = np.random.rand(10)
df['5'] = np.random.rand(10)
df =
x y 1 2 3 4 5
0 0 30 0.047787 0.435396 0.926836 0.314469 0.477411
1 1 31 0.083536 0.258120 0.682284 0.025050 0.713777
2 2 32 0.201041 0.872864 0.050977 0.580314 0.185589
3 3 33 0.105833 0.974538 0.559265 0.128242 0.217965
4 4 34 0.146551 0.662001 0.936995 0.050702 0.249724
5 5 35 0.098615 0.854952 0.649501 0.509777 0.726458
6 6 36 0.387889 0.040331 0.902277 0.051822 0.354042
7 7 37 0.321591 0.823724 0.052266 0.081491 0.187576
8 8 38 0.983665 0.152271 0.530755 0.384810 0.844386
9 9 39 0.649185 0.776682 0.239589 0.654547 0.581337
我真正想要的是以如下所示的方式拆分数据帧:
df1 =
x y 1
0 0 30 0.047787
1 1 31 0.083536
2 2 32 0.201041
3 3 33 0.105833
4 4 34 0.146551
5 5 35 0.098615
6 6 36 0.387889
7 7 37 0.321591
8 8 38 0.983665
9 9 39 0.649185
df2 =
x y 2
0 0 30 0.435396
1 1 31 0.25812
2 2 32 0.872864
3 3 33 0.974538
4 4 34 0.662001
5 5 35 0.854952
6 6 36 0.040331
7 7 37 0.823724
8 8 38 0.152271
9 9 39 0.776682
等等。由于我有很多列,所以很难一一完成。有没有更简单的方法来做到这一点?
提前致谢。
请您参考如下方法:
您可以设置 x 和 y 列,它们将始终保持静态作为索引轴 然后跨列执行 groupby。
通过使用字典理解,遍历每个这样的组。此外,末尾的 reset_index 将确保生成扁平化的 DF。
df.set_index(['x','y'], inplace=True)
dfs = {i:grp.reset_index() for i, grp in df.groupby(np.arange(len(df.columns)), axis=1)}
生成的字典的键将构成列名,可以像这样查询:
dfs[0]
dfs[1]
等等。
