首页 > 解决方案 > 熊猫系列 - groupby 并采取累积最近的非空

问题描述

我有一个包含一Category列(我们将按其分组)和一Value列的数据框。我想添加一个新列LastCleanValue,显示该组的最新非空值。如果组中还没有任何非空值,我们就取空值。例如:

df = pd.DataFrame({'Category':['a','a','a','b','b','a','a','b','a','a','b'],
                   'Value':[np.nan, np.nan, 34, 40, 42, 25, np.nan, np.nan, 31, 33, np.nan]})

该函数应添加一个新列:

|    | Category   |   Value |   LastCleanValue |
|---:|:-----------|--------:|-----------------:|
|  0 | a          |     nan |              nan |
|  1 | a          |     nan |              nan |
|  2 | a          |      34 |               34 |
|  3 | b          |      40 |               40 |
|  4 | b          |      42 |               42 |
|  5 | a          |      25 |               25 |
|  6 | a          |     nan |               25 |
|  7 | b          |     nan |               42 |
|  8 | a          |      31 |               31 |
|  9 | a          |      33 |               33 |
| 10 | b          |     nan |               42 |

我怎样才能在熊猫中做到这一点?我正在尝试类似的东西df.groupby('Category')['Value'].dropna().last()

标签: pythonpandaspandas-groupby

解决方案


这更像ffill

df['new'] = df.groupby('Category')['Value'].ffill()
Out[430]: 
0      NaN
1      NaN
2     34.0
3     40.0
4     42.0
5     25.0
6     25.0
7     42.0
8     31.0
9     33.0
10    42.0
Name: Value, dtype: float64

推荐阅读