我有以下Anscombe数据的长格式

import seaborn as sns

# Load the example dataset for Anscombe's quartet
安斯康贝_朗 = sns.load_dataset("anscombe")

安斯康贝_朗

    dataset x   y
0   I   10.0    8.04
1   I   8.0 6.95
2   I   13.0    7.58
3   I   9.0 8.81
4   I   11.0    8.33
5   I   14.0    9.96
6   I   6.0 7.24
...
...

我想把它转换成宽格式,其中列名x and y应该有后缀的集合编号.

预期输出:

anscombe_wide
#>    x1 x2 x3 x4    y1   y2    y3    y4
#> 1  10 10 10  8  8.04 9.14  7.46  6.58
#> 2   8  8  8  8  6.95 8.14  6.77  5.76
#> 3  13 13 13  8  7.58 8.74 12.74  7.71
#> 4   9  9  9  8  8.81 8.77  7.11  8.84
#> 5  11 11 11  8  8.33 9.26  7.81  8.47
#> 6  14 14 14  8  9.96 8.10  8.84  7.04
#> 7   6  6  6  8  7.24 6.13  6.08  5.25
#> 8   4  4  4 19  4.26 3.10  5.39 12.50
#> 9  12 12 12  8 10.84 9.13  8.15  5.56
#> 10  7  7  7  8  4.82 7.26  6.42  7.91
#> 11  5  5  5  8  5.68 4.74  5.73  6.89

推荐答案

GroupBy.cumcountDataFrame.pivot一起使用:

out = (anscombe_long.assign(g = anscombe_long.groupby('dataset').cumcount())
                    .pivot(index='g', columns='dataset'))
print (out)
            x                        y                    
dataset     I    II   III    IV      I    II    III     IV
g                                                         
0        10.0  10.0  10.0   8.0   8.04  9.14   7.46   6.58
1         8.0   8.0   8.0   8.0   6.95  8.14   6.77   5.76
2        13.0  13.0  13.0   8.0   7.58  8.74  12.74   7.71
3         9.0   9.0   9.0   8.0   8.81  8.77   7.11   8.84
4        11.0  11.0  11.0   8.0   8.33  9.26   7.81   8.47
5        14.0  14.0  14.0   8.0   9.96  8.10   8.84   7.04
6         6.0   6.0   6.0   8.0   7.24  6.13   6.08   5.25
7         4.0   4.0   4.0  19.0   4.26  3.10   5.39  12.50
8        12.0  12.0  12.0   8.0  10.84  9.13   8.15   5.56
9         7.0   7.0   7.0   8.0   4.82  7.26   6.42   7.91
10        5.0   5.0   5.0   8.0   5.68  4.74   5.73   6.89

然后在列表理解中将罗马数字转换为整数:

#pip install roman
import roman

out.columns=[f'{a}{roman.fromRoman(b)}' for a, b in out.columns]
print (out)
      x1    x2    x3    x4     y1    y2     y3     y4
g                                                    
0   10.0  10.0  10.0   8.0   8.04  9.14   7.46   6.58
1    8.0   8.0   8.0   8.0   6.95  8.14   6.77   5.76
2   13.0  13.0  13.0   8.0   7.58  8.74  12.74   7.71
3    9.0   9.0   9.0   8.0   8.81  8.77   7.11   8.84
4   11.0  11.0  11.0   8.0   8.33  9.26   7.81   8.47
5   14.0  14.0  14.0   8.0   9.96  8.10   8.84   7.04
6    6.0   6.0   6.0   8.0   7.24  6.13   6.08   5.25
7    4.0   4.0   4.0  19.0   4.26  3.10   5.39  12.50
8   12.0  12.0  12.0   8.0  10.84  9.13   8.15   5.56
9    7.0   7.0   7.0   8.0   4.82  7.26   6.42   7.91
10   5.0   5.0   5.0   8.0   5.68  4.74   5.73   6.89

如果总是通过映射字典知道dateset的个数,则解决方案:

d = {'I':1, 'II':2, 'III':3, 'IV':4}

out.columns=[f'{a}{d[b]}' for a, b in out.columns]
print (out)
      x1    x2    x3    x4     y1    y2     y3     y4
g                                                    
0   10.0  10.0  10.0   8.0   8.04  9.14   7.46   6.58
1    8.0   8.0   8.0   8.0   6.95  8.14   6.77   5.76
2   13.0  13.0  13.0   8.0   7.58  8.74  12.74   7.71
3    9.0   9.0   9.0   8.0   8.81  8.77   7.11   8.84
4   11.0  11.0  11.0   8.0   8.33  9.26   7.81   8.47
5   14.0  14.0  14.0   8.0   9.96  8.10   8.84   7.04
6    6.0   6.0   6.0   8.0   7.24  6.13   6.08   5.25
7    4.0   4.0   4.0  19.0   4.26  3.10   5.39  12.50
8   12.0  12.0  12.0   8.0  10.84  9.13   8.15   5.56
9    7.0   7.0   7.0   8.0   4.82  7.26   6.42   7.91
10   5.0   5.0   5.0   8.0   5.68  4.74   5.73   6.89

Python相关问答推荐

将词典写入Excel

Polars Select 多个元素产品

替换字符串中的点/逗号,以便可以将其转换为浮动

Python主进程和分支进程如何共享gc信息?

从今天起的future 12个月内使用Python迭代

如何处理嵌套的SON?

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

重新匹配{ }中包含的文本,其中文本可能包含{{var}

运行总计基于多列pandas的分组和总和

try 将一行连接到Tensorflow中的矩阵

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

计算每个IP的平均值

在pandas中使用group_by,但有条件

用渐近模计算含符号的矩阵乘法

判断solve_ivp中的事件

如何更改groupby作用域以找到满足掩码条件的第一个值?

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

如何杀死一个进程,我的Python可执行文件以sudo启动?

如何防止Pandas将索引标为周期?

基于多个数组的多个条件将值添加到numpy数组