pandas pivot table for heatmap
我正在尝试使用 seaborn 生成热图,但是我的数据格式存在一个小问题。
目前,我的数据格式为:
1 2 3 4 5 6 7 8 | Name Diag Date A 1 2006-12-01 A 1 1994-02-12 A 2 2001-07-23 B 2 1999-09-12 B 1 2016-10-12 C 3 2010-01-20 C 2 1998-08-20 |
我想创建一个热图(最好是在 python 中)在一个轴上显示
ValueError: Index contains duplicate entries, cannot reshape
这来自:
piv = df.pivot_table(index=\\'Name\\',columns=\\'Diag\\')
时间无关紧要,但我想展示哪些
相关联
编辑:
我已经尝试过:
piv = df.pivot_table(index=\\'Name\\',columns=\\'Diag\\', values=\\'Time\\', aggfunc=\\'mean\\')
然而,由于时间是日期时间格式,我最终得到:
pandas.core.base.DataError:没有要聚合的数字类型
你需要
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | print (df) Name Diag Time 0 A 1 12 <-duplicates for same A, 1 different value 1 A 1 13 <-duplicates for same A, 1 different value 2 A 2 14 3 B 2 18 4 B 1 1 5 C 3 9 6 C 2 8 df = df.pivot_table(index='Name',columns='Diag', values='Time', aggfunc='mean') print (df) Diag 1 2 3 Name A 12.5 14.0 NaN B 1.0 18.0 NaN C NaN 8.0 9.0 |
替代方案:
1 2 3 4 5 6 7 | df = df.groupby(['Name','Diag'])['Time'].mean().unstack() print (df) Diag 1 2 3 Name A 12.5 14.0 NaN B 1.0 18.0 NaN C NaN 8.0 9.0 |
编辑:
您还可以通过
检查所有重复项
1 2 3 4 5 | df = df.loc[df.duplicated(['Name','Diag'], keep=False), ['Name','Diag']] print (df) Name Diag 0 A 1 1 A 1 |
编辑:
日期时间的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | df.Date = pd.to_datetime(df.Date) df['dates_in_ns'] = pd.Series(df.Date.values.astype(np.int64), index=df.index) df = df.pivot_table(index='Name', columns='Diag', values='dates_in_ns', aggfunc='mean', fill_value=0) df = df.apply(pd.to_datetime) print (df) Diag 1 2 3 Name A 2000-07-07 12:00:00 2001-07-23 1970-01-01 B 2016-10-12 00:00:00 1999-09-12 1970-01-01 C 1970-01-01 00:00:00 1998-08-20 2010-01-20 |