Pandas group by,filter&情节

时间:2016-09-19 23:39:29

标签: python pandas plot group-by filtering

我有一个数据框

if (choice == "sandwich")
{
....
} else if (choice == "platter")
{
...
} else if (choice == "salad")
{
...
} else {
cout << "\n     Option unavailable, try again." << endl;
}

等等......

我希望获得与以下类似的每条规则的数据框: 例如。 rule_name A的数据帧:

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 B的数据帧:

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

我目前的解决方案:

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

正如您所看到的,我无法获得规则名称的%,并且只绘制了count_rule_name。我觉得有(a)解决方案和(b)更好的解决方案,然后迭代每个规则名称和绘图,但不幸的是我无法弄清楚。

1 个答案:

答案 0 :(得分: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)

enter image description here

<强> 剧情

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

enter image description here

验证计数

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

enter image description here