我有一个数据框
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)
情节
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)
关于python - Pandas 分组,过滤和绘图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39583634/