Python 基于另一列的条件ffill
我试图有条件地ffill一个值,直到第二列遇到一个值,然后重置第一列值。实际上,第一列是一个“开”开关,直到“关”开关(第二列)遇到一个值为止。我还没有一个使用ffill和where的工作示例 输入示例:Python 基于另一列的条件ffill,python,pandas,Python,Pandas,我试图有条件地ffill一个值,直到第二列遇到一个值,然后重置第一列值。实际上,第一列是一个“开”开关,直到“关”开关(第二列)遇到一个值为止。我还没有一个使用ffill和where的工作示例 输入示例: Index Start End 0 0 0 1 0 0 2 1 0 3 0 0 4 0 0 5 0 0 6 0 1 7
Index Start End
0 0 0
1 0 0
2 1 0
3 0 0
4 0 0
5 0 0
6 0 1
7 0 0
8 1 0
9 0 0
10 0 0
11 0 0
12 0 1
13 0 1
14 0 0
期望输出:
Index Start End
0 0 0
1 0 0
2 1 0
3 1 0
4 1 0
5 1 0
6 1 1
7 0 0
8 1 0
9 1 0
10 1 0
11 1 0
12 1 1
13 0 1
14 0 0
编辑:
处理基于另一列设置的值时会出现问题。逻辑如下:开始应为零,直到R列低于25,然后为正,直到R列高于80,循环应重复。然而,在第13行,Start被莫名其妙地设置为1,尽管不符合标准
df = pd.DataFrame(np.random.randint(0, 100, size=100), columns=['R'])
df['Start'] = np.where((df.R < 25), 1, 0)
df['End'] = np.where((df.R > 80), 1, 0)
df.loc[df['End'].shift().eq(0), 'Start'] = df['Start'].replace(0, np.nan).ffill().fillna(0).astype(int)
尝试:
[外]
我已经编辑了这个问题,并提供了一个更详细的问题示例。
“在索引10
处的R列低于20之前,开始应为零,R
为24
。”。。?为什么在这种情况下“开始”是1?我的错,它应该说明“R列低于25”。这个很棘手。我的建议是用经过编辑的解释和样本数据来回答一个新问题。这样,您将从其他人那里获得更高的可视性和更好的解决方案。
R Start End
0 58 0 0
1 98 0 1
2 91 0 1
3 69 0 0
4 55 0 0
5 57 0 0
6 64 0 0
7 75 0 1
8 78 0 1
9 90 0 1
10 24 1 0
11 89 1 1
12 36 0 0
13 70 **1** 0
df.loc[df['End'].shift().eq(0), 'Start'] = df['Start'].replace(0, np.nan).ffill().fillna(0).astype(int)
Start End
0 0 0
1 0 0
2 1 0
3 1 0
4 1 0
5 1 0
6 1 1
7 0 0
8 1 0
9 1 0
10 1 0
11 1 0
12 1 1
13 0 1
14 0 0