我有一个这样的Pandas DataFrame:
每周我都会收到新的数据。例如,在第1周,我有1月和2月的数据,在第2周,我有2月和3月的数据,第3周,我有3月和4月的数据。
要求是,在第2周没有Jan的数据时,我们希望将前一周Jan编号的数据复制到当前周。类似地,在第3周,如果没有1月或2月的数据,我们需要从前一个最近的一周复制数据,以便数据看起来像这样:
新的月份可能会在未来增加,所以我们需要复制最新的一周数据滚动到下周。
是否有一个Pandas函数来执行此滚动数据?
如果当前周中的列有某些月份的缺失值,则需要将该特定月份的值滚动复制到未来周,并且除了基于分类列之外,还要考虑新的月份。
1条答案
按热度按时间u0njafvf1#
这不是一种可扩展的方法来建模真实世界的数据。
Hadley Wickham会建议您对数据集进行tidy,以便“每个变量都是一列,每个观察结果都是一行,每种类型的观察单位都是一张表”。
现在,我知道你可能正在从一个类似格式的电子表格中绘制这个数据框,它有月份名称标题,你可能需要写一个groupby或pivot来把它放回那个格式,以便其他人审查,如果这是他们习惯的。但是现在我们需要melt这个不整洁的电子表格,所以它是一个明智的relation。
您有三个
cat_{1,2,3}
列。猫是非常好的,他们都需要。但是week
列,取值为1
..5
,不是很棒。关于苹果和橘子的事情,我的意思是关于几个月和几个星期,是他们彼此相当独立。一个给定的月份可以从七个可能的工作日中的任何一个开始,并且有一些可变的周数。您的业务每周都会生成新的观察结果。在我们对数据建模的时候,让我们尊重这一点。
.isocalendar()函数返回(isoyear,isoweek,DoW)三元组。您可以放弃一周中的最后一天,因为它在您的用例中是恒定的。许多企业选择星期一开始一周,所以两个周末的数据将方便地一起出现。
现在我们有一个
(isoyear, isoweek, cats)
的复合PK,PKMap到一个单一的值,很好。存储第二个属性(一个普通的date
列)将很方便,以便以后报告。它可能永远是一个“星期一”的日期。请注意,date.dt.year
有时会与isoyear
不同。您没有将问题转化为reproducible,因此我们看不到可以适应这种新表示的代码。
是否有pandas函数来执行此滚动数据?
给定所描述的整洁关系,很容易循环{months,weeks}来填充所需的报告值。
tl;dr:您选择的 * 表示 * 原始源数据的方式可能与您 * 报告 * 原始源数据的方式不同。