我要添加一个transform
的列,其代码如下:
df['new_date'] = df.groupby('account')['date'].transform('last')
这很好用,但是默认情况下会丢弃NaN
(如现有错误here,here和here中所述),我希望保留这些。开发人员建议改用nth(-1)
。没问题!
但是,我不知道如何在transform
中使用它。错误消息
`df.groupby('a')['b'].transform('nth')`
是nth() missing 1 required positional argument: 'n'
,这似乎很诱人,暗示只要我能找出将索引传递给该方法的方法,变换就可以识别该方法。但是没有一个
df.groupby('a')['b'].transform('nth(-1)')
df.groupby('a')['b'].transform('nth'(-1))
df.groupby('a')['b'].transform('nth')(-1)
工作。有什么方法可以做到这一点?
答案 0 :(得分:3)
这里可以使用第二个参数作为传递给GroupBy.nth
的值:
np.random.seed(2015)
df = pd.DataFrame({'account': ['foo', 'bar', 'baz'] * 3,
'val': np.random.choice([np.nan, 1],size=9)})
#print (df)
df['val1'] = df.groupby('account')['val'].transform('last')
df['val2'] = df.groupby('account')['val'].transform('nth', -1)
print (df)
account val val1 val2
0 foo NaN 1.0 1.0
1 bar NaN 1.0 NaN
2 baz NaN NaN NaN
3 foo NaN 1.0 1.0
4 bar 1.0 1.0 NaN
5 baz NaN NaN NaN
6 foo 1.0 1.0 1.0
7 bar NaN 1.0 NaN
8 baz NaN NaN NaN