我想确保每个vintage
对应的val2
的第一个值是NaN
,目前已经有两个是NaN
,但我想确保0.53
也更改为NaN
。
df = pd.DataFrame({
'vintage': ['2017-01-01', '2017-01-01', '2017-01-01', '2017-02-01', '2017-02-01', '2017-03-01'],
'date': ['2017-01-01', '2017-02-01', '2017-03-01', '2017-02-01', '2017-03-01', '2017-03-01'],
'val1': [0.59, 0.68, 0.8, 0.54, 0.61, 0.6],
'val2': [np.nan, 0.66, 0.81, 0.53, 0.62, np.nan]
})
以下是我目前所做的尝试:
df.groupby('vintage').first().val2 #This gives the first non-NaN values, as shown below
vintage
2017-01-01 0.66
2017-02-01 0.53
2017-03-01 NaN
df.groupby('vintage').first().val2 = np.nan #This doesn't change anything
df.val2
0 NaN
1 0.66
2 0.81
3 0.53
4 0.62
5 NaN
4条答案
按热度按时间jei2mxaa1#
你不能赋值给一个聚合的结果,而且
first
忽略了现有的NaN
,你可以做的是调用head(1)
,它将返回每个组的第一行,并将索引传递给loc
来屏蔽orig df以覆盖那些列的值:在这里,您可以看到
head(1)
返回每个组的第一行:与
first
相反,first
将返回第一个非NaN,除非该组只有NaN
值:70gysomp2#
或者创建位置,选择第一个,将val2更改为
np.nan
to94eoyn3#
我想你也可以这样写:
bmvo0sr54#
时间:
字符串