我有一个看起来像这样的数据帧:
import pandas as pd
df = pd.DataFrame({'Institution':['Uni1', 'Uni2', 'Uni3', 'Uni1', 'Uni2', 'Uni3'],
'Year': [2018, 2018, 2018, 2019, 2019, 2019],
'Value': [1000000, 2000000, 250000, 2300000, 3000000, 90000],
'Rank': [10, 9, 1, 8, 7, 3]})
我想把数据分组成一个表格:
Uni1 Uni2 Uni3
2018 1000000 2000000 250000
2019 2300000 3000000 90000
到目前为止,我只是试图绘制一个不按年份分隔的简单表格,它看起来像:
Uni1 Uni2 Uni3 Uni1 Uni2 Uni3
1000000 2000000 250000 2300000 3000000 90000
这就是我正在使用的:
import matplotlib.pyplot as plt
plt.table(cellText = df.values.T)
这样可以打印整个数据帧,但当我试图只得到一行时,我会得到以下内容:
plt.table(cellText = df['Value'].values.T)
TypeError: object of type 'numpy.int64' has no len()
我知道一个解决方案是定义一个新的DataFrame,它只由我想要绘制的行组成,但我怀疑这是最干净的解决方案。
绘制值列:
plt.table(cellText = df[['Value']].values.T)
请记住,df[['Value']]
返回DataFrame,而df['Value']
返回Series。
使用DataFrame.pivot_table
:为每年创建行
df_table=df.pivot_table(index='Year',columns='Institution',values='Value')
print(df_table)
Institution Uni1 Uni2 Uni3
Year
2018 1000000 2000000 250000
2019 2300000 3000000 90000
则使用plt.table
:
plt.table(cellText = df_table.values)