我有一个数据框

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

等。
我目前的解决方案:
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)一个更好的解决方案,然后遍历每个规则名并绘制,但不幸的是,我无法找到它。

最佳答案

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

python -  Pandas 分组,过滤和绘图-LMLPHP
情节
df.groupby([df.Date.str.split().str[0]]).rule_name.value_counts(True) \
  .unstack(fill_value=0).mul(100).round(1).plot.bar()

python -  Pandas 分组,过滤和绘图-LMLPHP
验证计数
df.groupby([df.Date.str.split().str[0], df.rule_name]).size().unstack(fill_value=0)

python -  Pandas 分组,过滤和绘图-LMLPHP

关于python - Pandas 分组,过滤和绘图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39583634/

10-09 19:07