在一列上填充条件,并在熊猫中移动值



我的数据帧如下所示

№№№   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:如果在列中randomNumCol1,则从列中复制值№№№.如果为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

有什么建议吗?

您可以从randomNumCol1的列中复制'№№№'值,将其余值设置为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')

最新更新