首页 > 解决方案 > iloc 条件分组由 pandas 填充

问题描述

尝试在数据框中有条件地填充 NaN,基于:
1. A 上的值(使用 groupby 完成)
2. 在 groupby(A) 内部,如果值为 nan 并且是第一个,则填充为零然后填充(例如 A=a )
3. 在 groupby(A) 内部,如果 value 是 nan 并且不是第一个,bfill (例如 A=b)
4. 在 groupby(A) 内部,如果 value 是 nan 但没有数据点可跟随,ffill (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

标签: pythonpandasdata-cleaningdata-processing

解决方案


我们可以这样做GroupBy.ffill,然后我们确定每个组的中间结果都正确填写,然后我们可以使用Series.fillnawith 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

推荐阅读