>我有一个包含 3 列的数据帧:变量 1、变量 2、值。 值是根据变量 1 和变量 2(全部反对)的所有可能组合来测量的。此外,变量 1 和变量 2 具有相同的名称。使用内置透视函数重塑数据帧时,不会按特定顺序完成。
这是我的原始数据帧的样子:
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
(格式在编辑器中看起来不错,但显示不正确。我希望你明白这一点。
如果我理解正确的话。
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
一起使用。