我的数据框中有一个指标变量,其值为 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]})
最佳答案
使用 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
关于python - 用之前的非零值替换零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54471121/