给出以下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))
因为我只想将 first np.nan
(每个组中的 )替换为0
答案 0 :(得分:2)
这是您需要的吗?
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