Pandas DataFrame:将数据扩展到整个月

马蒂亚斯

我获得了每月时间跟踪预订的数据。由于没有周末和国定假日的预订,因此某些天缺少数据。现在,我正在扩展数据,以使其包括该月的所有天,但仅包含空数据。这是我解决的方法。我想知道是否有更优雅的方法来实现相同的目的?

为列建立索引的样本输入数据start

+---------------------+--------+-------+----------+-----------------+---------+
| start               | from   | to    | paused   |   hours_working |   error |
|---------------------+--------+-------+----------+-----------------+---------|
| 2019-11-04 00:00:00 | 08:30  | 18:00 | 00:30    |               9 |       0 |
| 2019-11-05 00:00:00 | 09:30  | 19:00 | 00:30    |               9 |       0 |
| 2019-11-06 00:00:00 | 09:00  | 18:00 | 01:00    |               8 |       0 |
+---------------------+--------+-------+----------+-----------------+---------+

然后检索第一个时间戳,然后将其用于创建整个月的期间/索引:

# get first day of the month
first_timestamp = df.index[0].replace(day=1).strftime("%Y-%m-%d")

# build an index containing all days of that month
index_month = pd.date_range(start=first_timestamp, periods=pd.Period(first_timestamp).days_in_month, freq="24H")
index_month

导致:

DatetimeIndex(['2019-11-01', '2019-11-02', '2019-11-03', '2019-11-04',
               '2019-11-05', '2019-11-06', '2019-11-07', '2019-11-08',
               '2019-11-09', '2019-11-10', '2019-11-11', '2019-11-12',
               '2019-11-13', '2019-11-14', '2019-11-15', '2019-11-16',
               '2019-11-17', '2019-11-18', '2019-11-19', '2019-11-20',
               '2019-11-21', '2019-11-22', '2019-11-23', '2019-11-24',
               '2019-11-25', '2019-11-26', '2019-11-27', '2019-11-28',
               '2019-11-29', '2019-11-30'],
              dtype='datetime64[ns]', freq='24H')

不幸的是,我不知道如何将索引(日期范围)与原始数据结合在一起。因此,我必须使用新索引创建一个新的空数据框,并将该数据框与原始数据连接在一起。

df_index = pd.DataFrame(index_month, columns=['start'])
df_index.set_index('start', inplace=True)

df_month = df_index.join(df).reset_index()

from tabulate import tabulate
print(tabulate(df_month, headers='keys', tablefmt='psql'))

给我最终结果:

+----+---------------------+--------+-------+----------+-----------------+---------+
|    | start               | from   | to    | paused   |   hours_working |   error |
|----+---------------------+--------+-------+----------+-----------------+---------|
|  0 | 2019-11-01 00:00:00 | nan    | nan   | nan      |             nan |     nan |
|  1 | 2019-11-02 00:00:00 | nan    | nan   | nan      |             nan |     nan |
|  2 | 2019-11-03 00:00:00 | nan    | nan   | nan      |             nan |     nan |
|  3 | 2019-11-04 00:00:00 | 08:30  | 18:00 | 00:30    |               9 |       0 |
|  4 | 2019-11-05 00:00:00 | 09:30  | 19:00 | 00:30    |               9 |       0 |
|  5 | 2019-11-06 00:00:00 | 09:00  | 18:00 | 01:00    |               8 |       0 |
|  6 | 2019-11-07 00:00:00 | nan    | nan   | nan      |             nan |     nan |
|  7 | 2019-11-08 00:00:00 | nan    | nan   | nan      |             nan |     nan |
|  8 | 2019-11-09 00:00:00 | nan    | nan   | nan      |             nan |     nan |
|  9 | 2019-11-10 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 10 | 2019-11-11 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 11 | 2019-11-12 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 12 | 2019-11-13 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 13 | 2019-11-14 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 14 | 2019-11-15 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 15 | 2019-11-16 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 16 | 2019-11-17 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 17 | 2019-11-18 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 18 | 2019-11-19 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 19 | 2019-11-20 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 20 | 2019-11-21 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 21 | 2019-11-22 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 22 | 2019-11-23 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 23 | 2019-11-24 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 24 | 2019-11-25 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 25 | 2019-11-26 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 26 | 2019-11-27 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 27 | 2019-11-28 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 28 | 2019-11-29 00:00:00 | nan    | nan   | nan      |             nan |     nan |
| 29 | 2019-11-30 00:00:00 | nan    | nan   | nan      |             nan |     nan |
+----+---------------------+--------+-------+----------+-----------------+---------+

那么,这有什么问题呢?没什么,结果很好。但是我想知道是否有更好的方法来创建该月的索引,然后如何将该索引与原始数据结合起来?有什么建议?只是想学习并变得更好;)

耶斯列尔

如果的所有值DatetimeIndex都是唯一的,则可以在这里使用DataFrame.reindex-对于new的开始和结束,也要DatetimeIndex先将第一个值转换为month Period然后使用Period.to_timestamp

first_per = df.index[0].to_period('m')

# build an index containing all days of that month
index_month = pd.date_range(start=first_per.to_timestamp(how='start'), 
                            end=first_per.to_timestamp(how='end'),
                            freq="24H",
                            name='start')

df = df.reindex(index_month).reset_index()
print (df.head(10))
       start   from     to paused  hours_working  error
0 2019-11-01    NaN    NaN    NaN            NaN    NaN
1 2019-11-02    NaN    NaN    NaN            NaN    NaN
2 2019-11-03    NaN    NaN    NaN            NaN    NaN
3 2019-11-04  08:30  18:00  00:30            9.0    0.0
4 2019-11-05  09:30  19:00  00:30            9.0    0.0
5 2019-11-06  09:00  18:00  01:00            8.0    0.0
6 2019-11-07    NaN    NaN    NaN            NaN    NaN
7 2019-11-08    NaN    NaN    NaN            NaN    NaN
8 2019-11-09    NaN    NaN    NaN            NaN    NaN
9 2019-11-10    NaN    NaN    NaN            NaN    NaN

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将pandas数据框日期范围扩展到单个行

来自分类Dev

将多值列扩展到 Pandas 中的新列

来自分类Dev

将整个pandas multiIndex数据框除以dataframe变量

来自分类Dev

从数据库中选择-选择整个月的数据

来自分类Dev

将数据扩展到图形范围

来自分类Dev

将日期时间转换为显示整个月

来自分类Dev

将分号数据字典到Pandas Dataframe

来自分类Dev

将document.getSelection()扩展到整个段落

来自分类Dev

将document.getSelection()扩展到整个段落

来自分类Dev

VBA-Word将修订扩展到整个单词

来自分类Dev

将pandas DataFrame列扩展为多行

来自分类Dev

使用Pandas扩展DataFrame

来自分类Dev

matlab数据文件到pandas DataFrame

来自分类Dev

防止链接扩展到整个页面

来自分类Dev

ArrayFormula扩展到整个列

来自分类Dev

防止链接扩展到整个页面

来自分类Dev

通过分组将数据扩展到新列

来自分类常见问题

Python:Pandas Dataframe如何将整个列与标量相乘

来自分类Dev

将 JSON 数据从 API 解析到 Pandas

来自分类Dev

将数据从 Tableau Server 拉入 Pandas Dataframe

来自分类Dev

如何从整个月的第一天开始粘贴数据?

来自分类Dev

如何使用CSS将包装元素扩展到整个浏览器宽度?

来自分类Dev

在容器div内时将div扩展到页面的整个宽度

来自分类Dev

如何将选择扩展到EditText中的整个单词?

来自分类Dev

如何将main div扩展到整个浏览器窗口高度?

来自分类Dev

将jQuery垂直制表符内容区域扩展到整个页面宽度

来自分类Dev

无法在溢出时将事件 div 扩展到整个屏幕

来自分类Dev

将pandas DataFrame列转换为NumPy数组(扩展问题)

来自分类Dev

如何在我的 sql 中获取整个月的每个月的第一天的数据?

Related 相关文章

热门标签

归档