首页 > 解决方案 > pandas:shift(1)组中的所有值,除了第一个(每个组中)应该为0

问题描述

给定以下df:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(1,3, (10,2)), columns=['a','b']).sort_values(['a'])

现在我想用该组中的前一个值替换每个组中的所有值,除了我想用 0 替换的每个组中的第一个值。

这不会:

df.groupby("a", sort = False).transform(lambda g: g.shift(1).fillna(0))

因为我只想用 0 替换第一个 np.nan在每个组中

标签: pythonpandaspandas-groupby

解决方案


这是你需要的吗?

s=df.groupby("a", sort = False).b.shift()

s
Out[913]: 
0    NaN
1    1.0
2    2.0
3    1.0
4    1.0
5    NaN
6    2.0
7    2.0
8    1.0
9    2.0
Name: b, dtype: float64
idx=s.groupby(df.a).head(1).index
s.loc[idx]=0

推荐阅读