考虑包含具有开始和结束日期的雇主-雇员链接的数据。你知道吗
employer employee start end
0 0 0 2007-01-01 2007-12-31
1 1 86 2007-01-01 2007-12-31
2 1 63 2007-06-01 2007-12-31
3 1 93 2007-01-01 2007-12-31
现在我想“散布”这个日期,即在start
和end
之间为每个月创建一个观测值。我以为
def extend(x):
index = pd.date_range(start=x['start'], end=x['end'], freq='M')
df = pd.DataFrame([x.values], index=index, columns=x.index)
return df
long = df.apply(extend, axis=1)
但是,它只包含以下索引:
>>> long.head()
Out[245]:
employer employee start end
0 employer employee start end
1 employer employee start end
但是,当我在第一行进行测试时,它起了作用:
>>> extend(df.iloc[0])
Out[246]:
employer employee start end
2007-01-31 0 0 2007-01-01 2007-12-31
2007-02-28 0 0 2007-01-01 2007-12-31
2007-03-31 0 0 2007-01-01 2007-12-31
(...)
我做错什么了?或许,有没有更好的方法?我的最终目标是获得与前一个相同的输出,但格式为employer employee month year
我认为问题是
apply
期望返回与输入相同数量的行。你知道吗您可以通过
iterrows
和列表理解来完成,而无需对代码进行太多修改:你也可以用
groupby/apply
来做,因为它更灵活。所以类似于以下内容:或者可以在concat行上迭代
相关问题 更多 >
编程相关推荐