Dav*_*vid 5 python numpy dataframe pandas
好的,我有一个很大的数据框,例如:
hour value
0 0 1
1 6 2
2 12 3
3 18 4
4 0 5
5 6 6
6 12 7
7 18 8
8 6 9
9 12 10
10 18 11
11 12 12
12 18 13
13 0 14
Run Code Online (Sandbox Code Playgroud)
让我们不要迷失在这里.该列hour表示一天中的小时数,从6到6小时.列values很好,确切地说,这里的值是一个例子,而不是实际值.
如果仔细查看该hour列,可以看到缺少数小时.例如,第7行和第8行之间存在间隙(缺少小时0的值).还存在更大的间隙,例如在行10和11之间(00和06小时).
我需要什么?我想检查一个小时(当然)缺少一个值的时间,并完成数据框插入一行,其中包含相应的小时和一个np.nan值.
我有什么想法?我认为这可以使用模运算轻松解决,在这种情况下使用mod 24,例如when 18 + 6 = 24 = 0 mod 24.因此,将计数器初始化为零并添加6 ,并注意计数器在模块算术模型24中定义,您可以验证每个hour是否是相应的小时,如果不是,则插入一个具有相应小时和np.nan值的新行.
我不知道如何在python中实现模块化算法来迭代数据帧列.
非常感谢你.
group_hours = (df.hour <= df.hour.shift()).cumsum()
def insert_missing_hours(df):
return df.set_index('hour').reindex([0, 6, 12, 18]).reset_index()
df.groupby(group_hours).apply(insert_missing_hours).reset_index(drop=1)
Run Code Online (Sandbox Code Playgroud)
好像:
hour value
0 0 1.0
1 6 2.0
2 12 3.0
3 18 4.0
4 0 5.0
5 6 6.0
6 12 7.0
7 18 8.0
8 0 NaN
9 6 9.0
10 12 10.0
11 18 11.0
12 0 NaN
13 6 NaN
14 12 12.0
15 18 13.0
16 0 14.0
17 6 NaN
18 12 NaN
19 18 NaN
Run Code Online (Sandbox Code Playgroud)
为了申请,reindex我需要确定要分组的行.我检查了行的小时是否小于或等于前一行的小时.如果是,则标记新组.
insert_missing_hours恰恰是reindex具有的子群[0, 6, 12, 18].