我的数据框中有一个指示变量,其取值为1 0或-1。我想创建一个避免使用0的新变量,而是重复指标变量的非零值,直到其变为1或-1。
我使用np.where语句尝试了各种构造,但无法解决此问题。
这是原始数据框:
import pandas as pd
df = pd.DataFrame(
{'Date': [1,2,3,4,5,6,7,8,9,10],
'Ind': [1,0,0,-1,0,0,0,1,0,0]})
df
我希望获得一个如下所示的数据框:
df2 = pd.DataFrame(
{'Date': [1,2,3,4,5,6,7,8,9,10],
'Ind': [1,0,0,-1,0,0,0,1,0,0],
'NewVar':[1,1,1,-1,-1,-1,-1,1,1,1]})
答案 0 :(得分:2)
使用mask
和ffill
:
df['Ind'].mask(df['Ind'] == 0).ffill()
0 1.0
1 1.0
2 1.0
3 -1.0
4 -1.0
5 -1.0
6 -1.0
7 1.0
8 1.0
9 1.0
Name: Ind, dtype: float64
df['Ind'].mask(df['Ind'] == 0).ffill(downcast='infer')
0 1
1 1
2 1
3 -1
4 -1
5 -1
6 -1
7 1
8 1
9 1
Name: Ind, dtype: int64
另一种选择是使用groupby
和transform
,并使用由cumsum
组成的石斑鱼:
df.groupby(df['Ind'].ne(0).cumsum())['Ind'].transform('first')
0 1
1 1
2 1
3 -1
4 -1
5 -1
6 -1
7 1
8 1
9 1
Name: Ind, dtype: int64
答案 1 :(得分:2)
使用reindex
df.Ind[df.Ind!=0].reindex(df.index,method='ffill')
0 1
1 1
2 1
3 -1
4 -1
5 -1
6 -1
7 1
8 1
9 1
Name: Ind, dtype: int64