gpt4 book ai didi

python - 如何将 Pandas DataFrame 转换为 Clustermap 的多索引形式?

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:35 25 4
gpt4 key购买 nike

我有一个数据帧,它是观察列表,按“名称”列分组。我很难将其转换为多索引格式。

我有类似的东西:

    name | ratio | DayOfWeek | HourOfDay
foo | 0.7 | Mon | 0
foo | 0.2 | Mon | 1
foo | 0.11 | Mon | 2
foo | 0.45 | Mon | 3
..
foo | 0.2 | Mon | 23
foo | 0.1 | Tue | 0
foo | 0.6 | Tue | 1
foo | 0.2 | Tue | 2
..
foo | 0.1 | Sun | 23
bar | 0.2 | Mon | 0
bar | 0.11 | Mon | 1
..

等等。

我想要的是可以与seaborn clustermaps一起使用的东西,以显示每天(作为一个整体)的“名称”的“比率”与几天内特定时间之间的相关性。

例如我需要类似的东西(不确定是否正确,但这就是我尝试过的):

                      | foo  | bar | ...
DayOfWeek HourOfDay |
Mon 0 | 0.7 | 0.2 | ...
1 | ...
2 | ...
...
Tue 0 | 0.1 | ...
1 | ...
... 2

一旦我有了它,我希望能够将它 xs() 成可由来自seaborn的热图/聚类图使用的切片。

最佳答案

您可以使用set_indexunstack :

df = df.set_index(['DayOfWeek','HourOfDay','name'])['ratio'].unstack()
print (df)
name bar foo
DayOfWeek HourOfDay
Mon 0 0.20 0.70
1 0.11 0.20
2 NaN 0.11
3 NaN 0.45
23 NaN 0.20
Sun 23 NaN 0.10
Tue 0 NaN 0.10
1 NaN 0.60
2 NaN 0.20

但是如果重复需要 pivot_table使用一些聚合函数,例如 meansum...:

print (df)
name ratio DayOfWeek HourOfDay
0 foo 0.70 Mon 0 <- duplicate for same name, DayOfWeek and HourOfDay - 0.7
1 foo 0.90 Mon 0 <- duplicate for same name, DayOfWeek and HourOfDay - 0.9
2 foo 0.20 Mon 1
3 foo 0.11 Mon 2
4 foo 0.45 Mon 3
5 foo 0.20 Mon 23
6 foo 0.10 Tue 0
7 foo 0.60 Tue 1
8 foo 0.20 Tue 2
9 foo 0.10 Sun 23
10 bar 0.20 Mon 0
11 bar 0.11 Mon 1


df = df.pivot_table(index=['DayOfWeek','HourOfDay'],
columns='name',
values='ratio',
aggfunc='mean')
print (df)

name bar foo
DayOfWeek HourOfDay
Mon 0 0.20 0.80 < (0.7 + 0.9)/2 = 0.8
1 0.11 0.20
2 NaN 0.11
3 NaN 0.45
23 NaN 0.20
Sun 23 NaN 0.10
Tue 0 NaN 0.10
1 NaN 0.60
2 NaN 0.20

替代groupby:

df = df.groupby(['DayOfWeek','HourOfDay','name'])['ratio'].mean().unstack()
print (df)
name bar foo
DayOfWeek HourOfDay
Mon 0 0.20 0.80 < (0.7 + 0.9)/2 = 0.8
1 0.11 0.20
2 NaN 0.11
3 NaN 0.45
23 NaN 0.20
Sun 23 NaN 0.10
Tue 0 NaN 0.10
1 NaN 0.60
2 NaN 0.20

关于python - 如何将 Pandas DataFrame 转换为 Clustermap 的多索引形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43310846/

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