如何使用 python 在两列中扩展具有日期范围的数据框?

Posted

技术标签:

【中文标题】如何使用 python 在两列中扩展具有日期范围的数据框?【英文标题】:How can I extend a data frame with date range in two columns using python? 【发布时间】:2020-06-28 13:04:39 【问题描述】:

如何将数据帧中信息的时间范围扩展为新的数据帧。

我有一个数据框 df,其日期、字符串和因子类似于 这个:
 "start"     "end"      "note"   "item"
2016-12-30  2017-01-03    Z        1
2017-09-10  2017-09-14    W        2
我想展开如下。
 "start"      "note"    "item"
2016-12-30     Z         1
2016-12-31     Z         1
2017-01-01     Z         1
2017-01-02     Z         1
2017-01-03     Z         1
2017-09-10     W         2
2017-09-11     W         2
2017-09-12     W         2
2017-09-13     W         2
2017-09-14     W         2

我如何使用 python 来做到这一点。

【问题讨论】:

你没有尝试过吗? 不知道有没有快速有效的方法。它不应该减慢我的代码,因为我会将它应用到每一行。 @DelenaMalan 【参考方案1】:

用途:

#convert columns to datetimes if necessary
df[['start','end']] = df[['start','end']].apply(pd.to_datetime)
#repeat datetimes to Series
s = pd.concat([pd.Series(r.Index,pd.date_range(r.start, r.end)) 
                         for r in df.itertuples()])

#repoeat values, remove end column and reaasign start by index values
df = df.loc[s].drop(['end'], axis=1).assign(start=s.index).reset_index(drop=True)
print (df)
       start note  item
0 2016-12-30    Z     1
1 2016-12-31    Z     1
2 2017-01-01    Z     1
3 2017-01-02    Z     1
4 2017-01-03    Z     1
5 2017-09-10    W     2
6 2017-09-11    W     2
7 2017-09-12    W     2
8 2017-09-13    W     2
9 2017-09-14    W     2

【讨论】:

以上是关于如何使用 python 在两列中扩展具有日期范围的数据框?的主要内容,如果未能解决你的问题,请参考以下文章

Android:在两列中显示信息,而不是 BaseAdapter 的一列

Pandas - 在两列中查找具有匹配值的行并在另一列中相乘

如何同时在两列中添加或插入多行? [复制]

ipywidgets:如何在两列中组织滑块

SQLAlchemy如何检查值是否在两列中的值之间?

如何将一列中的两列合并为日期与熊猫?