我有一个包含3列的数据框:variable1,variable2,value。 值是从变量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
(格式化在编辑器中看起来不错,但无法正确显示。希望您能理解这一点。)
答案 0 :(得分: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
一起使用。