考虑以下数据框:
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(),但数据框太简单,程序会出错。有什么建议?谢谢!
答案 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()