我有一个包含1408行数据的Python数据帧。我的目标是将一周内给定工作日相关的最大数量和最小数量与前一个最大/最小发生的一周中同一天的下一周数量进行比较。从本质上讲,我想看看五分之一(因为在一个工作周内有5天)排名第1和第5,看看他们每周如何变化。建立与每个工作日相关联的数字cdf。
要清理数据,我需要从中删除18周。也就是说,与节假日相关的数据框中的每周以及假日发生后的整周后的整周。
在此之后,我想我应该在数据框中插入一个列,在周一到周五标记我的所有数据 - 对于文件中的所有日期(有6年的数据)。标记M-F的原因是我可以按升序对与星期几相关联的每个数字进行排序。并在一周中查询。
对1.或2.或两者的方法论建议将非常感激。
谢谢!
答案 0 :(得分:0)
#2似乎最好在生成的Groupby对象上使用df.groupby()
和apply()
的组合进行处理。也许一个例子是最好的解释方式。
给定数据框:
In [53]: df
Out[53]:
Value
2012-08-01 61
2012-08-02 52
2012-08-03 89
2012-08-06 44
2012-08-07 35
2012-08-08 98
2012-08-09 64
2012-08-10 48
2012-08-13 100
2012-08-14 95
2012-08-15 14
2012-08-16 55
2012-08-17 58
2012-08-20 11
2012-08-21 28
2012-08-22 95
2012-08-23 18
2012-08-24 81
2012-08-27 27
2012-08-28 81
2012-08-29 28
2012-08-30 16
2012-08-31 50
In [54]: def rankdays(df):
.....: if len(df) != 5:
.....: return pandas.Series()
.....: return pandas.Series(df.Value.rank(), index=df.index.weekday)
.....:
In [52]: df.groupby(lambda x: x.week).apply(rankdays).unstack()
Out[52]:
0 1 2 3 4
32 2 1 5 4 3
33 5 4 1 2 3
34 1 3 5 2 4
35 2 5 3 1 4