您不能将结果赋值给聚合,也将
first忽略现存的
NaN,您可以做的是调用
head(1),它将返回每个组的第一行,并将索引传递
loc给orig
df以覆盖这些列值:
In[91]df.loc[df.groupby('vintage')['val2'].head(1).index, 'val2'] = np.NaNdf:Out[91]: date val1 val2 vintage0 2017-01-01 0.59 NaN 2017-01-011 2017-02-01 0.68 0.66 2017-01-012 2017-03-01 0.80 0.81 2017-01-013 2017-02-01 0.54 NaN 2017-02-014 2017-03-01 0.61 0.62 2017-02-015 2017-03-01 0.60 NaN 2017-03-01在这里,您可以看到
head(1)返回每个组的第一行:
In[94]:df.groupby('vintage')['val2'].head(1)Out[94]: 0 NaN3 0.535 NaNName: val2, dtype: float64与此相反的
first结果将返回第一个非NaN,除非
NaN该组只有值:
In[95]:df.groupby('vintage')['val2'].first()Out[95]: vintage2017-01-01 0.662017-02-01 0.532017-03-01 NaNName: val2, dtype: float64


