基于以下条件尝试在数据框中有条件地填充NaN:
1. A上的值(使用groupby完成)
2.在groupby(A)内,如果value是nan并且是第一个,则填充为零,然后填充(例如A = a)
3.在groupby(A)内,如果value是nan而不是first,则填充(例如A = b)
4.在groupby(A)内,如果value为nan但没有要跟随的数据点,则填充(例如A = c)
我闻到三元+ lambda,但想用Python的方式编写它。
基本上,起点是:
df
A B
0 a NaN
1 a NaN
2 a 3.0
3 a 4.0
4 b 4.0
5 b NaN
6 b 6.0
7 b 6.0
8 c 7.0
9 c NaN
10 c NaN
并且df应该变为:
df
A B
0 a 0.0
1 a 0.0
2 a 3.0
3 a 4.0
4 b 4.0
5 b 6.0
6 b 6.0
7 b 6.0
8 c 7.0
9 c 7.0
10 c 7.0
答案 0 :(得分:1)
我们可以执行GroupBy.ffill
,然后确保每个组的中间结果均正确填写,之后我们可以对Series.fillna
进行0
,因为这是剩下的唯一值:
df['B'] = df.groupby('A')['B'].ffill().fillna(0)
A B
0 a 0.0
1 a 0.0
2 a 3.0
3 a 4.0
4 b 4.0
5 b 4.0
6 b 6.0
7 b 6.0
8 c 7.0
9 c 7.0
10 c 7.0