将熊猫 groupby 中的组绘制在一个图中时如何更改 x 轴
Posted
技术标签:
【中文标题】将熊猫 groupby 中的组绘制在一个图中时如何更改 x 轴【英文标题】:How to change the x-axis when plotting groups from a pandas groupby combined in one plot 【发布时间】:2013-05-18 19:42:40 【问题描述】:我正在处理一个聊天日志,我的数据包含时间戳、用户名和消息。我的目标是绘制多个用户每月的消息数量,以便比较用户何时活跃。
问题在于 x 轴。在那里,我想根据频率(在这种情况下是几个月)来确定日期。相反,似乎在那里输出了分组数据的 Multiindex。此外,数据似乎分组正确,但图中每个月都有三个数据点。
我包含了一些代码来生成随机数据。 (我使用的是 Python 3.2)
这里是当前输出:
import numpy as np
import time
import datetime
import pandas as pd
import matplotlib.pyplot as plt
from pandas.util.testing import rands
a=datetime.datetime(2012,12,3)
b=datetime.datetime(2013,12,3)
a_tstamp=time.mktime(a.timetuple())
b_tstamp=time.mktime(b.timetuple())
message_number=400
tstamps=np.random.random_integers(a_tstamp,b_tstamp,message_number)
tstamps.sort()
dates=[datetime.datetime.fromtimestamp(x) for x in tstamps]
usernames=[rands(4) for x in range(10)]
usernames=usernames*40
values=np.random.random_integers(0,45,message_number)
df=pd.DataFrame('tstamps':dates,'usernames':usernames,'messages':[rands(5) for x in range(message_number)])
df=df.set_index(df.tstamps)
grouped=df.groupby(df.usernames)
# trying to plot a trend to see how active user were over several months
plt.figure()
for k,g in grouped:
g=g.resample('m',how='count')
g.plot(style='*-',label=k )
plt.show()
plt.legend(loc='best')
plt.show()
【问题讨论】:
【参考方案1】:问题:您的结果是按日期和按列(消息、用户名、时间戳)索引的。
2013-07-31 messages 3
tstamps 3
usernames 3
2013-08-31 messages 4
tstamps 4
usernames 4
不要对整个组重新采样,而是只取消息列,然后重新采样,
plt.figure()
for k, g in grouped:
messages = g.messages.resample('m', how='count')
messages.plot(style='*-', label=k)
plt.show()
现在正在绘制的系列是
2012-12-31 3
2013-01-31 3
2013-02-28 3
2013-03-31 4
...
输出看起来像
【讨论】:
以上是关于将熊猫 groupby 中的组绘制在一个图中时如何更改 x 轴的主要内容,如果未能解决你的问题,请参考以下文章