'이름'열로 그룹화 된 관찰 목록 인 dataFrame이 있습니다. 나는 그것을 multiIndex 형식으로 바꾸는 데 어려움을 겪고 있습니다.
다음과 같은 것이 있습니다.
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 clustermap과 함께 사용할 수있는 것입니다.
예를 들어 다음과 같은 것이 필요합니다 (올바른지 확실하지 않지만 시도한 것입니다).
| foo | bar | ...
DayOfWeek HourOfDay |
Mon 0 | 0.7 | 0.2 | ...
1 | ...
2 | ...
...
Tue 0 | 0.1 | ...
1 | ...
... 2
일단 내가 seaborn의 heatmap / clustermap에서 사용할 수있는 조각으로 xs () 할 수 있기를 바랍니다.
다음 set_index
과 함께 사용할 수 있습니다 unstack
.
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
같은 일부 집계 FUNC와 함께 mean
, sum
... :
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
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다