在另一列上填充条件并在pandas

时间:2017-06-30 13:55:55

标签: python pandas

我的数据框看起来像这样

      №№№   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)) 

我的代码没有给出正确的结果

n_k

我不太明白如何使用shift()。如何处理2中的第一个单元格,该单元格应始终为BS[0]

请问任何建议?

2 个答案:

答案 0 :(得分:2)

您可以复制randomNumCol 1 nan列中的值,将剩余值设置为ffill,然后使用{{1}填写缺失的值:

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

答案 1 :(得分:2)

您可以使用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')