繁体   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