iloc有条件的groupby熊猫填充

时间:2020-06-18 22:47:55

标签: python pandas data-cleaning data-processing

基于以下条件尝试在数据框中有条件地填充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

1 个答案:

答案 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