我有一个这样的数据帧,例如:
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()