【发布时间】:2019-05-15 18:09:45
【问题描述】:
我正在处理一个问题陈述,要求我填写缺失日期的行(即 Pandas 数据框列中两个日期之间的日期)。请看下面的例子。我目前的方法是使用 Pandas(如下所述)。
输入数据示例(大约有 25000 行):
A | B | C | Date1 | Date2
a1 | b1 | c1 | 1Jan1990 | 15Aug1990 <- this row should be repeated for all dates between the two dates
.......................
a3 | b3 | c3 | 11May1986 | 11May1986 <- this row should NOT be repeated. Just 1 entry since both dates are same.
.......................
a5 | b5 | c5 | 1Dec1984 | 31Dec2017 <- this row should be repeated for all dates between the two dates
..........................
..........................
预期输出:
A | B | C | Month | Year
a1 | b1 | c1 | 1 | 1990 <- Since date 1 column for this row was Jan 1990
a1 | b1 | c1 | 2 | 1990
.......................
.......................
a1 | b1 | c1 | 7 | 1990
a1 | b1 | c1 | 8 | 1990 <- Since date 2 column for this row was Aug 1990
..........................
a3 | b3 | c3 | 5 | 1986 <- only 1 row since two dates in input dataframe were same for this row.
...........................
a5 | b5 | c5 | 12 | 1984 <- since date 1 column for this row was Dec 1984
a5 | b5 | c5 | 1 | 1985
..........................
..........................
a5 | b5 | c5 | 11 | 2017
a5 | b5 | c5 | 12 | 2017 <- Since date 2 column for this row was Dec 2017
我知道实现这一目标的更传统方法(我目前的方法):
- 遍历每一行。
- 获取两个日期列之间的天数差。
- 如果两列中的日期相同,则只需在输出数据框中包含该月份和年份的一行
- 如果日期不同(diff > 0),则获取每个日期差异行的所有(月、年)组合并附加到新数据框
由于输入数据大约有 25000 行,我相信输出数据会非常大,所以我正在寻找更多 Pythonic 方式 来实现这一点(如果可能比迭代方法更快)!
【问题讨论】:
-
因此,根据您的预期输出,您希望在日期之间的每个月都有一个新行,对吧?
-
是的。但包含(不排除)月份(这两列的日期)。我还更新了输入和输出以包含两个日期相同的情况。
-
我投票决定将此问题作为题外话结束,因为有效但可以改进的代码应该在 codereview.stackexchange.com 上,而不是 stackoverflow.com
标签: python python-3.x pandas date dataframe