【问题标题】:Pandas group by, filter & plotPandas 分组、过滤和绘图
【发布时间】:2017-01-27 18:15:41
【问题描述】:

我有一个数据框

Date         rule_name
Jan 1 2016   A
Feb 4 2016   B
Jun 6 2016   C
Feb 5 2016   B
Feb 9 2016   D
Jun 5 2016   A

等等……

我希望为每个规则获得一个数据框,如下所示: 例如。 rule_name A 的数据框:

date       counts (rule_name)   %_rule_name 
Jan 16     1                   100
Feb 16     0                    0
Jun 16     1                   50

例如 rule_name B 的数据框:

date        counts (rule_name)   %_rule_name 
Jan 16      0                   0
Feb 16      2                   66.6
Jun 16      0                   0

等等

我目前的解决方案:

rule_names = df['rule_name'].unique().tolist()
for i in rule_names:
    df_temp = df[df['rule_name'] == i]
    df_temp = df.groupby(df['date'].map(lambda x: str(x.year) + '-' + str(x.strftime('%m')))).count()
    df_temp.plot(kind='line', title = 'Rule Name: ' + str(i))

如您所见,我无法获得规则名称的百分比,而仅绘制 count_rule_name。我觉得有(a)一个解决方案和(b)一个更好的解决方案,然后遍历每个规则名称并进行绘图,但不幸的是我无法弄清楚。

【问题讨论】:

    标签: python pandas plot group-by filtering


    【解决方案1】:

    解决方案
    使用df.Date.str.split().str[0] 获取月份

    df.groupby([df.Date.str.split().str[0]]).rule_name.value_counts(True) \
      .unstack(fill_value=0).mul(100).round(1)
    

    情节

    df.groupby([df.Date.str.split().str[0]]).rule_name.value_counts(True) \
      .unstack(fill_value=0).mul(100).round(1).plot.bar()
    

    验证计数

    df.groupby([df.Date.str.split().str[0], df.rule_name]).size().unstack(fill_value=0)
    

    【讨论】:

    • 这很有帮助 - 但我正在尝试将它放入同一个数据框中,以便我可以将它们绘制在同一个图上。 IE。该图的规则名称,每个月计数,然后在右侧 y 轴上将是一个百分比图 .... 你认为这可能吗?
    • @SteelyDanish 我完全猜到你想要什么。如果不是这样,您将不得不付出更多努力向我们展示您的期望。
    • 感谢您的评论 - 为清晰起见已更新 @piRSquared
    • 为了进一步你所做的 - 我希望将你创建的第一个表和第二个表结合起来,但对于每个 rule_name @piRSquared
    • 我把你的 cmets 放在心上,并以更好的格式重新解释了这个问题 --> stackoverflow.com/questions/39597785/… 我会关闭这个。
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 2022-01-12
    • 2015-09-25
    • 2020-11-03
    • 2012-10-21
    • 2021-06-21
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多