以字母顺序不区分大小写的顺序旋转(重塑)pandas数据帧

问题描述 投票:1回答:1

我有一个包含3列的数据框:variable1,variable2,value。值是从variable1和variable2的所有可能组合(全部反对所有)中测量的。此外,variable1和variable2具有相同的名称。使用内置的pivot函数重塑我的数据帧时,这不是按特定顺序完成的。

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

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

我在生成后尝试重新排序重新整理的表,但这并没有解决问题,因为它是以错误的顺序生成的。

这就是我生成重构数据帧的方式:

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 

(格式化在编辑器中看起来很好但是没有正确显示。我希望你明白这一点。)

python pandas dataframe pivot-table reshape
1个回答
0
投票

如果我理解正确的话。

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

© www.soinside.com 2019 - 2024. All rights reserved.