Pandas按组分组,筛选和绘图

3

我是一份数据框架

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

我将翻译如下:

等等。

我希望能为每个规则获得一个类似以下的数据框架: 例如,规则名称 A 的数据框架:

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

例如,规则名称B的数据框:
date        counts (rule_name)   %_rule_name 
Jan 16      0                   0
Feb 16      2                   66.6
Jun 16      0                   0

我目前的解决方案:

Etc.

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))

您可以看到,我无法获得规则名称的百分比,而只能绘制计数规则名称。我觉得有解决方案和更好的解决方案,而不是遍历每个规则名称并绘制,但不幸的是无法弄清楚。

1个回答

3

解决方案
使用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)

在这里输入图片描述

情节


这是一个关于IT技术的图片,暂无具体信息。
df.groupby([df.Date.str.split().str[0]]).rule_name.value_counts(True) \
  .unstack(fill_value=0).mul(100).round(1).plot.bar()

在此输入图片描述

验证计数


(注:本文涉及 IT 技术)
df.groupby([df.Date.str.split().str[0], df.rule_name]).size().unstack(fill_value=0)

enter image description here


这很有帮助 - 但我正在尝试将它们带入同一数据框中,以便可以在同一图表上绘制它们。即,绘图的规则名称,每月计数,右y轴会是一个%的图表......你认为这可能吗? - SteelyDanish
1
@SteelyDanish,我完全是在猜你想要什么。如果这不是你想要的,你就需要更加努力地向我们展示你的期望。 - piRSquared
感谢评论 - 已更新以获得更清晰的表述 @piRSquared - SteelyDanish
为了进一步完善您所做的事情 - 我希望将您创建的第一个表格和第二个表格合并,但是针对每个规则名称 @piRSquared。 - SteelyDanish
我认真考虑了您的评论,并以更好的格式重新解释了问题 --> http://stackoverflow.com/questions/39597785/pandas-multicolumn-groupby-plotting。我将关闭此问题。 - SteelyDanish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接