在每个胶卷中找到第一个有效值

时间:2019-05-09 15:24:00

标签: python pandas

这是一个特殊的任务,但是我试图提出一种有效的方法来找到每个组的几列中的第一个数值。因此,对于以下数据框:

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

1 个答案:

答案 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