python - 按字母顺序(不区分大小写)旋转( reshape )pandas 数据框

标签 python pandas dataframe pivot-table reshape

我有一个包含 3 列的数据框:变量 1、变量 2、值。 值是根据变量 1 和变量 2 的所有可能组合来测量的(全部对全部)。此外,变量 1 和变量 2 具有相同的名称。当使用内置的数据透视函数 reshape 我的数据框时,这不是按特定顺序完成的。

这就是我的原始数据框的样子:

var1 var2   value
A   A   0,00016
A   B   0,02848
A   C   0,00028
A   D   0,0028
A   E   0,00012
A   F   0,00092
A   G   0,08612
A   H   0,00704
B   B   0,00364
B   C   2,27228
B   D   0,00244
B   E   0,00136
B   F   0,00024
B   G   0,00504
B   H   1,08716
C   C   0,00032
C   D   4,0033
C   E   0,00024
C   F   0,00012
C   G   0
C   H   0,00592
D   D   0,01288
D   E   0,00268
D   F   0,00644
D   G   0,00012
D   H   5,57488
E   E   0,00048
E   F   0,00012
E   G   0,0886
E   H   0,01948
F   F   0,00016
F   G   0,00188
F   H   0,0212
G   G   0,0014
G   H   0,00244
H   H   0,00092

我尝试在生成重构表后对其进行重新排序,但这并不能解决问题,因为它是以错误的顺序生成的。

这就是我生成 reshape 数据框的方式:

df = pd.read_csv("results.csv", sep = ";")
# sort names case-insensitive
columns = sorted(df['var1'].unique(), key=lambda s: s.casefold())
pivot = pd.pivot_table(df, values = "value", index = ["var1"], columns = "var2")
pivot = pivot.reindex_axis(columns, axis = 1)
pivot = pivot.reindex_axis(columns, axis = 0)

这会生成如下内容:

var1    A   B   C   D   E   F   G   H
A   0,00016 0,02848 0,00028 0,0028  0,00012 0,00092 0,08612 0,00704
B       0,00364     0,00244     0,00024     1,08716 
C       2,27228 0,00032 4,00E-05    0,00024 0,00012 0   0,00592
D               0,01288     0,00644     5,57488 
E       0,00136     0,00268 0,00048 0,00012 0,0886  0,01948
F                       0,00016     0,0212  
G       0,00504     0,00012     0,00188 0,0014  0,00244
H                               0,00092 

这就是我在生成它后尝试对其进行重新排序的方法,但它并不能解决问题,因为重新整形的数据帧是以错误的顺序生成的。因此,这是没有用的,因为不尊重字母顺序。

pivot['Total'] = pivot.count(axis = 1)
pivot = pivot.sort_values(by= "Total" , ascending = False)
pivot = pivot.drop(columns = ["Total"])
pivot.loc['Total']= pivot.count()
pivot = pivot.sort_values(by = "Total", axis = 1, ascending = False)
pivot = pivot.drop(index = ["Total"])

但是,我希望我的数据框像这样对称:

var1    A   B   C   D   E   F   G   H
A   0,00016 0,02848 0,00028 0,0028  0,00012 0,00092 0,08612 0,00704
B       0,00364 2,27228 0,00244 0,00136 0,00024 0,00504 1,08716 
C           0,00032 4,0033  0,00024 0,00012 0   0,00592
D               0,01288 0,00268 0,00644 0,00012 5,57488 
E                   0,00048 0,00012 0,0886  0,01948
F                       0,00016 0,00188 0,0212  
G                           0,0014  0,00244
H                               0,00092 

(编辑器中的格式看起来不错,但显示不正确。我希望您明白这一点。)

最佳答案

如果我理解正确的话。

result = pd.pivot_table(df, values='value', index='var1',
                        columns='var2', aggfunc=lambda x: x)

result.fillna('')

var2        A        B        C        D        E        F        G        H
var1                                                                        
A     0,00016  0,02848  0,00028   0,0028  0,00012  0,00092  0,08612  0,00704
B              0,00364  2,27228  0,00244  0,00136  0,00024  0,00504  1,08716
C                       0,00032   4,0033  0,00024  0,00012        0  0,00592
D                                0,01288  0,00268  0,00644  0,00012  5,57488
E                                         0,00048  0,00012   0,0886  0,01948
F                                                  0,00016  0,00188   0,0212
G                                                            0,0014  0,00244
H                                                                     0,0009

pd.pivot_table 与自定义 aggfunc 结合使用。

关于python - 按字母顺序(不区分大小写)旋转( reshape )pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55698466/

相关文章:

python - Pandas groupby 将 ndarrays 的嵌套数组分配回数据帧

python - 值错误: Negative dimension size caused by subtracting 22 from 1 for 'conv3d_3/convolution' (op: 'Conv3D' )

python - 无法从 python 命令提示符安装任何 python 包

python - For循环跳过大部分数据集

python - 映射数据帧而不是系列 pandas

r - 对列表中每个 data.frame 的列进行求和,给出唯一包含总和的数据框

python - 非数字数据的散点图

Python – 检查 Mac 是否正在播放音乐

python - 将 python 数据框汇总为每条记录一行时出现问题

python - Pandas 将列拆分为多级