我想绘制特定列的条形图和折线图。
使用agg
函数我获得了与函数一样多的新列。
如果我只想绘制 A
的列总和以及 B
列的平均值,我该怎么办?
您可以在下面找到我的代码,其中绘制了所有列。
index=pd.date_range('2013-1-1 00:00', '2013-12-31 23:00', freq='1h')
df=pd.DataFrame(np.random.rand(len(index),2),index=index, columns=['A','B'])
df2=df.groupby(lambda x: x.month).agg({'A' : [np.mean, np.sum], 'B': np.mean})
fig = plt.figure()
ax = df2['A'].plot(kind="bar");plt.xticks(rotation=0)
ax2 = ax.twinx()
ax2.plot(ax.get_xticks(),df2['B'],marker='o')
你能否给我一些提示如何解决这个问题? 提前谢谢!
答案 0 :(得分:4)
您有分层索引。因此,您只需使用tuple
语法选择正确的列。
所以而不是:
ax = df2['A'].plot(kind="bar")
使用:
ax = df2[('A', 'sum')].plot(kind="bar")
而不是:
ax2.plot(ax.get_xticks(),df2['B'],marker='o')
使用:
ax2.plot(ax.get_xticks(),df2[('B', 'mean')],marker='o')
全部放在一起:
import numpy as np
import pandas as pd
import seaborn as sbn
import matplotlib.pyplot as plt
np.random.seed(0)
index = pd.date_range('2013-1-1 00:00', '2013-12-31 23:00', freq='1h')
df = pd.DataFrame(np.random.rand(len(index),2),index=index, columns=['A','B'])
df2 = df.groupby(lambda x: x.month).agg({'A' : [np.mean, np.sum], 'B': np.mean})
fig = plt.figure()
ax = df2[('A', 'sum')].plot(kind="bar", alpha=0.7)
plt.xticks(rotation=0)
ax2 = ax.twinx()
ax2.plot(ax.get_xticks(),df2[('B', 'mean')],marker='o', c='navy', linewidth=4)
给你一个很好的图表: