与 nth 一起使用变换

Jos*_*der 3 python pandas pandas-groupby

我正在添加一个transform带有以下代码的列:

df['new_date'] = df.groupby('account')['date'].transform('last')
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是默认情况下它会丢弃NaNs(如此此处此处的现有错误中所述),我想保留它。开发人员建议nth(-1)改用。没问题!

但是,我不知道如何将它与transform. 错误信息为

`df.groupby('a')['b'].transform('nth')`
Run Code Online (Sandbox Code Playgroud)

is 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)
Run Code Online (Sandbox Code Playgroud)

工作。有没有办法做到这一点?

jez*_*ael 5

这里可以使用第二个参数作为传递给的值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
Run Code Online (Sandbox Code Playgroud)