我的数据框中有一个指标变量,其值为 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

python - 用之前的非零值替换零-LMLPHP

我希望得到一个如下所示的数据框:
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]})

python - 用之前的非零值替换零-LMLPHP

最佳答案

使用 maskffill :

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

另一种选择是使用 groupbytransform 使用由 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/

10-11 12:40