如何使用 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.


千万里不及你
浏览 115回答 1
1回答

侃侃尔雅

我相信您需要选择包含至少一个缺失值的列,向前填充缺失值并除以7:m = df.isna().any()df.loc[:, m] = df.loc[:, m].ffill(limit=7).div(7)print (df)          date  col1  col2  col30   02-09-2019   2.0   NaN     11   09-09-2019   2.0   NaN     22   16-09-2019   2.0   1.0     33   23-09-2019   2.0   1.0     44   30-09-2019   2.0   1.0     55   07-10-2019   2.0   1.0     66   14-10-2019   2.0   1.0     77   21-10-2019   3.0   1.0     88   28-10-2019   3.0   1.0     99   04-11-2019   3.0   2.0    1010  11-11-2019   3.0   2.0    11
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python