gpt4 book ai didi

python - pandas 数据透视表 降序排列 python

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:49 24 4
gpt4 key购买 nike

我有一个数据集,我用它读取

data = pd.excel('.../data.xlsx)

然后我用数据透视表组织了一切

newdata = data.pivot_table(index=["Block", "Conc", "Replicate"], columns=["Name"], values="F532Mean-B532") '

数据透视表看起来像这样(实际表格的格式与此有点不同,我在这里手动输入表格:

Block     conc      replicate     nameA    nameB   nameC ..     

1
0 1 2225 12 333
2 3 423 52
3 53 88 239
0.01 1 24 53 923
2 454 253 53
3 4 5 23
10 1 34 53 923
2 44 253 53
3 11 49 232
2
0 1 234 634 39
.....

一切看起来都不错,除了我希望“Conc”列按降序排列,所以我希望它是 10, 0.01, 0,而不是 0, 0.01, 10。

 Conc 
10

0.01

0
...

我在网上搜索并发现了一些带有此类代码的帖子:

  key1 = newdata.index.labels[0]
key2 = newdata['Concentration'].rank(ascending=False)
sorter = np.lexsort((key2, key1))
sorted_df = newdata.take(sorter)

sorted_df.to_excel('pivottable.xlsx')

它给了我

KeyError: 'Concentration' 

我认为问题是网上的例子都只有2级,这里我有超过2级。有什么办法解决这个问题吗?

最佳答案

pivot_table 的输出是一个 MultiIndex。您想要按 MultiIndex 中的级别进行排序,为此您应该使用 sortlevel :

In [11]: df
Out[11]:
nameA nameB nameC
Block conc replicate
1 0.00 1 2225 12 333
2 3 423 52
3 53 88 239
0.01 1 24 53 923
2 454 253 53
3 4 5 23
10.00 1 34 53 923
2 44 253 53
3 11 49 232

In [12]: df.sortlevel(["Block", "conc"], ascending=[True, False], sort_remaining=False)
Out[12]:
nameA nameB nameC
Block conc replicate
1 10.00 1 34 53 923
2 44 253 53
3 11 49 232
0.01 1 24 53 923
2 454 253 53
3 4 5 23
0.00 1 2225 12 333
2 3 423 52
3 53 88 239

注意:sort_remaining 确保其他级别不会也排序,尽管在这里这不是问题(因为它已经在复制时排序)。

关于python - pandas 数据透视表 降序排列 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33590599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com