我有一个看起来像的DataFrame;
ID Tags Priority
Created At
2017-01-01 14:40:00 1234 some_tag P1
2017-01-02 15:00:00 1345 more_tag P4
我希望计算每周的所有不同优先级标签;
Week Priority Count
1 p1 1
p4 1
我尝试过相当简单的事情:
print(df.groupby(df.index.date).count())
但这并不能满足我的需要。
有什么建议吗?
答案 0 :(得分:1)
DateTimeIndex有一个名为weekofyear
的属性,可以满足您的需求。此外,您不仅希望按周分组,还要分配优先级。幸运的是,groupby
函数支持将多个属性分组:
import datetime
import pandas as pd
a = datetime.datetime.now()
b = datetime.datetime.now()
df = pd.DataFrame({'Created At': [a, b], 'ID': [1234, 1235], 'Priority': ['p1', 'p2']}).set_index('Created At')
print(df)
ID Priority
Created At
2017-02-08 22:25:51.862604 1234 p1
2017-02-08 22:25:57.095862 1235 p2
print(df.groupby([df.index.weekofyear, 'Priority']).count())
ID
Priority
6 p1 1
p2 1
答案 1 :(得分:0)
将pd.TimeGrouper
与freq W-Sat
一起使用,以便将'Sunday'
和'Monday'
组合在一起。
df.groupby([pd.TimeGrouper('W-Mon'), 'Priority']).ID.count().to_frame()
ID
Created At Priority
2017-01-07 P1 1
P4 1