这是一个特殊的任务,但是我试图提出一种有效的方法来找到每个组的几列中的第一个数值。因此,对于以下数据框:
df = pd.DataFrame({
'a':[1,1,1,1,1,2,2,2],
'b':[2,np.nan,4,np.nan,5,np.nan,1,np.nan],
'c':[np.nan,1,4,0,4,np.nan,6,np.nan],
'd':[np.nan, np.nan, np.nan, 1,6,2,5,np.nan]
})
a b c d
0 1 2.0 NaN NaN
1 1 NaN 1.0 NaN
2 1 4.0 4.0 NaN
3 1 NaN 0.0 1.0
4 1 5.0 4.0 6.0
5 2 NaN NaN 2.0
6 2 1.0 6.0 5.0
7 2 NaN NaN NaN
对于每个a
,我想要一行包含每一列中的第一个有效值的行,所以:
a b c d
0 1 2.0 1.0 1.0
2 2 1.0 6.0 2.0
答案 0 :(得分:1)
因此,您可以使用first
进行检查(返回第一个非空值)
df.groupby('a').first()
Out[369]:
b c d
a
1 2.0 1.0 1.0
2 1.0 6.0 2.0
如果索引很重要bfill
+ drop_duplicates
df.groupby('a').bfill().drop_duplicates('a')
Out[374]:
a b c d
0 1 2.0 1.0 1.0
5 2 1.0 6.0 2.0