获取groupby和aggregation之后的最后一个非NaN值



我有一个这样的数据帧,例如:

col1         col2
0       A            3
1       B            4
2       A            NaN
3       B            5  
4       A            5
5       A            NaN
6       B            NaN
.
.
.
47      B            8
48      A            9
49      B            NaN         
50      A            NaN

当我尝试df.groupby(['col1'], sort=False).agg({'col2':'last'}).reset_index()时,它会给我这个输出

col1      col2
0     A          NaN
1     B          NaN

我想得到groupby和agg之后的最后一个非NaN值。理想的输出低于

col1      col2
0     A          9
1     B          8

对我来说,如果NaN缺少值,您的解决方案运行良好。

这里有另一种选择:

df = df.dropna(subset=['col2']).drop_duplicates('col1', keep='last')

如果NaN是字符串,首先将它们转换为缺失的值:

df['col2'] = df['col2'].replace('NaN', np.nan)
df.groupby(['col1'], sort=False).agg({'col2':'last'}).reset_index()

最新更新