我的数据帧如下所示
№№№ randomNumCol n_k
0 5 1
1 6 0
2 7 1
3 8 0
4 9 1
5 10 1
6 11 1
7 12 1
...
我需要按如下方式填写一列n_k
:如果在列中randomNumCol
1
,则从列中复制值№№№
.如果为0
,则插入列中的前一个值n_k
。
但是n_k
列中的第一个值应该等于2
(现在我不知道为什么会这样(。
它应该看起来像这样
№№№ randomNumCol n_k
0 5 1 2
1 6 0 2
2 7 1 7
3 8 0 7
4 9 1 9
5 10 1 10
6 11 1 11
7 12 1 12
...
我的代码没有给出正确的结果
dftest['n_k'] = np.where(dftest['randomNumCol'] == 1, dftest['№№№'], dftest['n_k'].shift(1))
我不太明白如何使用 shift((。如何处理n_k
中的第一个单元格,它应该始终2
?
有什么建议吗?
您可以从randomNumCol
为1的列中复制'№№№'
值,将其余值设置为nan
,然后使用ffill
填充缺失值:
import pandas as pd
df['n_k'] = df['№№№'].where(df.randomNumCol == 1, pd.np.nan)
df['n_k'].iat[0] = 2
df['n_k'] = df['n_k'].ffill().astype(df['№№№'].dtype)
df
# №№№ randomNumCol n_k
#0 5 1 2
#1 6 0 2
#2 7 1 7
#3 8 0 7
#4 9 1 9
#5 10 1 10
#6 11 1 11
#7 12 1 12
您可以使用fillna()
而不是shift()
。
import pandas as pd
df['n_k']=np.nan
df.loc[df['randomNumCol']==1,'n_k']=df['№№№']
df.ix[0,'n_k']=2
df['n_k'].fillna(method='ffill')