Python 将groupby的第一个值设置为Nan
我有一个不同类别的时间序列Python 将groupby的第一个值设置为Nan,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个不同类别的时间序列 cat date price A 2000-01-01 100 A 2000-02-01 101 ... A 2010-12-01 140 B 2000-01-01 10 B 2000-02-01 10.4 ... B 2010-12-01 11.1 ... Z 2010-12-01 13.1 我需要计算所有资产的回报,使用 df['ret'] = df['price'] / df['price'].s
cat date price
A 2000-01-01 100
A 2000-02-01 101
...
A 2010-12-01 140
B 2000-01-01 10
B 2000-02-01 10.4
...
B 2010-12-01 11.1
...
Z 2010-12-01 13.1
我需要计算所有资产的回报,使用
df['ret'] = df['price'] / df['price'].shift(1) - 1
然而,这也会根据上一家公司的最后一次观察结果,计算出每个公司(A除外)的第一个要素的不正确回报。因此,我想在每一个类别中首先进行观察
使用计算机很容易获得这些观察结果
df.groupby('cat')['ret'].first()
但我对如何设置它们有点迷茫
df.groupby('cat')['ret'].first() = np.NaN
及
没有导致任何结果。要将每组的第一个值设置为缺失值,请使用: 但似乎需要: 您的解决方案应更改为: 试试这个
df.sort_values('date').groupby('cat')['price'].pct_change()
您需要
pct\u更改()
pct\u更改
需要在组内执行
df.loc[~df['cat'].duplicated(), 'ret']=np.NaN
df = df.sort_values(['cat','date'])
df['ret1'] = df.groupby('cat')['price'].pct_change()
df['ret2'] = df['price'] / df.groupby('cat')['price'].shift(1) - 1
print (df)
cat date price ret1 ret2
0 A 2000-01-01 100.0 NaN NaN
1 A 2000-02-01 101.0 0.010000 0.010000
2 A 2010-12-01 140.0 0.386139 0.386139
3 B 2000-01-01 10.0 NaN NaN
4 B 2000-02-01 10.4 0.040000 0.040000
5 B 2010-12-01 11.1 0.067308 0.067308
6 Z 2010-12-01 13.1 NaN NaN
df.sort_values('date').groupby('cat')['price'].pct_change()