【问题标题】:Plot bar graph using multiple groupby count in panda在熊猫中使用多个分组计数绘制条形图
【发布时间】:2015-05-31 21:24:35
【问题描述】:

我正在尝试使用 pandas 绘制条形图。 DataTime 是我从时间戳中获得的索引列。这是表结构:

到目前为止,我已经写了这个:

import sqlite3
from pylab import *
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt

conn = sqlite3.connect('DEMO2.sqlite')
df = pd.read_sql("SELECT * FROM Data", conn)
df['DateTime'] = df['DATE'].apply(lambda x: dt.date.fromtimestamp(x))

df1 = df.set_index('DateTime', drop=False)     

grouped= df1['DateTime'].groupby(lambda x: x.month)    
#df1.groupby([df1.index.month, 'DateTime']).count()    
grouped.count()

我想要这样的输出:

June 共有 4 个条目,其中一个条目以 u 开头。所以 X 有 4 y 有 1。七月也一样。

我还想使用输出绘制条形图(X 和 Y 条目)。我想要 MONTH vs Values 条形图

【问题讨论】:

  • 这是stackoverflow.com/questions/29283618/… 的近乎完全相同的副本。
  • 请写出您的问题,以便它们在不参考外部网站链接的情况下有意义。关于 SO 的问题应该对未来的读者有所帮助,如果这些链接失效,您的问题将很难理解。此外,请不要发布指向文本图像的链接(或嵌入文本的直接图像) - 发布文本本身,可能在引用块中,或者如果您需要保留格式,则在代码块中。

标签: python pandas group-by


【解决方案1】:

我会用 dict 创建 DataFrame:

result = pd.DataFrame({'X': g.count(),
                       'Y': g.apply(lambda x: x.str.startswith('u').sum())})

现在您可以使用 plot 方法来绘制月份与值的关系。

result.plot()

注意:您可以更有效地创建分组:

grouped = df1['DateTime'].groupby(df1['DateTime'].dt.to_period('M'))

grouped = df1['DateTime'].groupby(df1['DateTime'].dt.month)  # if you want Jan-2015 == Jan-2014

【讨论】:

  • 使用您的 groupby 代码时出现错误。这是错误“'Series' 对象没有属性 'dt'”。这是我的 df['DateTime'] => 2013-06-25 上的示例数据
  • @user3930865 您需要确保您的系列是 datetime64 类型,而不是 - 比如说 - 字符串......例如使用 df['DateTime'] = pd.to_datetime(df['DateTime'])。还要确保您使用的是最新版本的 pandas >= 0.15。
  • 我使用的是熊猫版本#0.14.1。我的 df['DateTime'].dtype 是对象。根据您的最后评论,它应该是 datetime64 。我试图转换它,但我无法解决问题。我正在使用带有 2.7 python 版本的 anaconda
  • 我使用 pf['DateTime'] = pf['DATE'].apply(lambda x: dt.date.fromtimestamp(x)) 将时间戳转换为日期。对于 groupby,我也使用这个 df1['DateTime'].groupby(lambda x: x.month)。在我的最终输出中,我想要 x 轴上的月-年。
  • @user3930865 使用pd.to_datetime 而不是应用。如果您使用 apply 它可能不会创建 Datetime 列。我认为您可能必须将 dt 访问器更新到 0.15.X。如果您想要月份年份,请使用上述答案的to_period 部分?
猜你喜欢
  • 2021-10-24
  • 2016-05-16
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多