扩展到我以前的question
我可以很好地用Seaborn绘制热图,并提出建议可以得到注释。但我现在看到了一个新问题。
输入文件
Nos,Place,Way,Name,00:00:00,12:00:00
123,London,Air,Apollo,342,972
123,London,Rail,Beta,2352,342
123,Paris,Bus,Beta,545,353
345,Paris,Bus,Rava,652,974
345,Rome,Bus,Rava,2325,56
345,London,Air,Rava,2532,9853
567,Paris,Air,Apollo,545,544
567,Rome,Rail,Apollo,5454,5
876,Japan,Rail,Apollo,644,54
876,Japan,Bus,Beta,45,57
876,Japan,Bus,Beta,40,57
876,Japan,Bus,Beta,40,57
程序:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
df = pd.read_csv('heat_map_data.csv')
df3 = df.copy()
for c in ['Place','Name']:
df3[c] = df3[c].astype('category')
sns.heatmap(df3.pivot_table(index='Place', columns='Name', values='00:00:00' ),annot=True, fmt='.1f' )
plt.show()
fmt='d'
然后我得到浮点值的错误并更改为fmt='f'
我得到所需列的计数。 但是当重复相同的轴值时,它不会添加所需列的计数。有什么解决方案吗?
如输入文件中所示
876,Japan,Bus,Beta,45,57
876,Japan,Bus,Beta,40,57
876,Japan,Bus,Beta,40,57
重复有3行,它们的值应显示为sum
表示Japan
和Beta
的单元格不应该定义为125
,而是显示41.7
。我如何实现这一目标?还可以给两个值作为注释吗?
pivot
我正在给value='00:00:00'
,但我需要它来动态读取文件中的最后一列。 答案 0 :(得分:13)
您可以使用dict中传递的http://www.wellnessvisit.com/blog/关键字:
aggfunc:
函数,默认numpy.mean或函数列表 如果传递的函数列表,生成的数据透视表将具有分层列,其顶层是函数名称(从函数对象本身推断)
sns.heatmap(df3.pivot_table(index='Place', columns='Name',
values='00:00:00',aggfunc={'00:00:00':np.sum}), annot=True, fmt='.1f')
哪个输出: