在大型pandas数据帧中填充数据集中的数据

时间:2015-05-18 12:14:02

标签: python numpy pandas dataframe

考虑以下数据框:

     index      group     signal
       1          1         1
       2          1        NAN
       3          1        NAN
       4          1        -1
       5          1        NAN
       6          2        NAN
       7          2        -1
       8          2        NAN
       9          3        NAN
       10         3        NAN
       11         3        NAN
       12         4        1
       13         4        NAN
       14         4        NAN

我想在每个组中通过ffill NANs修改信号,以便我可以拥有以下数据帧:

     index      group     signal
       1          1         1
       2          1         1
       3          1         1
       4          1        -1
       5          1        -1
       6          2        NAN
       7          2        -1
       8          2        -1
       9          3        NAN
       10         3        NAN
       11         3        NAN
       12         4        1
       13         4        1
       14         4        1

数据帧很大(大约800,000行,大约有16,000个不同的组),目前我将它放入groupby对象并尝试修改那里的每个组,这非常慢。然后我尝试将其转换为pivot_table和ffill(),但数据框太简单,程序会出错。有什么建议?谢谢!

1 个答案:

答案 0 :(得分:1)

你可以尝试一下吗

data_group = data.groupby('group').apply(lambda v: v.fillna(method='ffill'))

我认为在您的数据中NAN是一个字符串。它不是一个空元素。空数据将显示为NaN。如果是字符串,请替换NAN。像

data_group = data.groupby('group').apply(lambda v: v.replace('NAN', float('nan')).fillna(method='ffill'))

或者杰夫建议的更好的版本

data['signal'] = data['signal'].replace('NAN', float('nan'))
data = data.groupby('group').ffill()