Python 用另一列上的条件填充一列,并在另一列中移动值
我的数据框看起来像这样Python 用另一列上的条件填充一列,并在另一列中移动值,python,pandas,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 ... №№№ randomNumCol n_k 0
№№№ 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
...
№№№ 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
...
我需要按如下方式填充一列n_k:如果列中的randomNumCol为1,则从列中复制该值№№№. 如果为0,则插入n_k列中的上一个值
但是n_k列中的第一个值应该等于2,因为现在我不知道为什么会这样
应该是这样的
№№№ 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
...
№№№ 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
您可以从'№№№' 列,其中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
您可以使用fillna代替shift
+1你也是。我认为您不需要df['n_k']=np.nan,因为如果在执行赋值时缺少值,它将默认为nan。您也需要+1。我认为您不需要df['n_k']=np.nan,因为如果赋值时缺少该值,它将默认为nan。