python中的模块化算法迭代pandas数据帧

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中实现模块化算法来迭代数据帧列.

非常感谢你.

piR*_*red 6

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].