【问题标题】:data cleaning a python dataframe数据清理 python 数据框
【发布时间】:2012-08-23 10:55:41
【问题描述】:
我有一个包含 1408 行数据的 Python 数据框。我的目标是将一周中与给定工作日相关的最大数字和最小数字与前一周最大/最小发生的一周中同一天的下一周数字进行比较。从本质上讲,我想看看五分位数(因为一个工作日有 5 天)排名 1 和 5,看看它们每周如何变化。构建与每个工作日相关的数字的 cdf。
要清理数据,我需要从中删除总共 18 周。也就是说,与假期相关的数据框中的每个星期加上假期发生后的下一周的整个星期。
在此之后,我想我应该在数据框中插入一列,将我的所有数据标记为周一到周五——对于文件中的所有日期(有 6 年的数据)。标记 M-F 的原因是我可以按升序对与星期几相关的每个数字进行排序。并查询星期几。
非常感谢关于 1. 或 2. 或两者的方法学建议。
谢谢!
【问题讨论】:
标签:
python
dataframe
pandas
【解决方案1】:
#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