完整的pandas数据框,其中大型数据集的值为零

时间:2018-10-26 12:30:44

标签: python pandas

我有一个看起来像这样的数据框:

>> df
index  week  day  hour  count
5      10    2    10    70
5      10    3    11    80
7      10    2    18    15
7      10    2    19    12

其中week是一年中的星期几,day是星期几(0-6),而hour是一天中的小时数({{1} }。但是,由于我计划在以后将其转换为3D数组(周x天x小时),因此我必须在0-23列中包括没有项目的小时。示例:

count

,依此类推。我要做的是生成一个虚拟数据框,其中包含所有可能的索引-星期-天-小时组合(基本上是>> target_df index week day hour count 5 10 0 0 0 5 10 0 1 0 ... 5 10 2 10 70 5 10 2 11 0 ... 7 10 0 0 0 ... ... ,而没有target_df列):

count

然后使用

>> dummy_df

index  week  day  hour
5      10    0    0   
5      10    0    1   
...
5      10    2    10  
5      10    2    11
...
7      10    0    0 
...
...

这对于小型数据集工作正常,但是我正在处理很多行。就我现在正在处理的情况而言,target_df = pd.merge(df, dummy_df, on=['index','week','day','hour'], how='outer').fillna(0) dummy_df的行数为8200万,而且速度很慢。

EDIT :最慢的部分实际上是在构建target_df!我可以生成单个列表,但是将它们组合到熊猫数据框中是最慢的部分。

dummy_df

有更快的方法吗?

1 个答案:

答案 0 :(得分:1)

或者,您可以使用itertools.product作为列表的乘积来创建dummy_df

import itertools
index = range(100)
weeks = range(53)
days = range(7)
hours = range(24)

dummy_df = pd.DataFrame(list(itertools.product(index, weeks, days, hours)), columns=['index','week','day','hour'])

dummy_df.head()

    0   1   2   3
0   0   0   0   0
1   0   0   0   1
2   0   0   0   2
3   0   0   0   3
4   0   0   0   4