簡體   English   中英

如何使用 Python 將特定列的每周數據轉換為每日數據

[英]How to transform weekly data to daily for specific columns using Python

我是 python 和編程的新手。 我希望下面的問題得到很好的解釋。

我有一個大數據集,有 80 多列,其中一些列每周只有數據。 我想通過簡單地將每周值除以 7 並將結果歸因於值本身和該周的其他 6 天,將這些列轉換為每天都有值。

這是我的輸入數據集的樣子:

   date                  col1           col2           col3
02-09-2019               14               NaN            1
09-09-2019               NaN              NaN            2
16-09-2019               NaN              7              3
23-09-2019               NaN              NaN            4
30-09-2019               NaN              NaN            5
07-10-2019               NaN              NaN            6
14-10-2019               NaN              NaN            7
21-10-2019               21               NaN            8
28-10-2019               NaN              NaN            9
04-11-2019               NaN              14             10
11-11-2019               NaN              NaN            11
..

輸出應該是這樣的:

   date                  col1           col2           col3
02-09-2019                2               NaN            1
09-09-2019                2               NaN            2
16-09-2019                2               1              3
23-09-2019                2               1              4
30-09-2019                2               1              5
07-10-2019                2               1              6
14-10-2019                2               1              7
21-10-2019                3               1              8
28-10-2019                3               1              9
04-11-2019                3               2              10 
11-11-2019                3               2              11
..

我想不出解決方案,但這是我認為可能有效的方法:

def convert_to_daily(df):
    for column in df.columns.tolist():
        if column.isna(): # if true 
            for line in range(len(df[column])):
                # check if value is not empty and 
                succeeded by an 6 empty values or some 
                better logic  
                # I don´t know how to do that.

我相信您需要選擇列至少包含一個缺失值,向前填充缺失值並除以7

m = df.isna().any()
df.loc[:, m] = df.loc[:, m].ffill(limit=7).div(7)
print (df)
          date  col1  col2  col3
0   02-09-2019   2.0   NaN     1
1   09-09-2019   2.0   NaN     2
2   16-09-2019   2.0   1.0     3
3   23-09-2019   2.0   1.0     4
4   30-09-2019   2.0   1.0     5
5   07-10-2019   2.0   1.0     6
6   14-10-2019   2.0   1.0     7
7   21-10-2019   3.0   1.0     8
8   28-10-2019   3.0   1.0     9
9   04-11-2019   3.0   2.0    10
10  11-11-2019   3.0   2.0    11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM