Python 在一列中保留第一个值,而另一列等于一个值?
我希望在一列中保留第一个值,而另一列不等于零。对于B列,值在-1、0和1之间交替。对于C列,值等于任何整数。目标是在B列等于零时保持C列的第一个值。当前数据帧如下所示:Python 在一列中保留第一个值,而另一列等于一个值?,python,loops,pandas,dataframe,list-comprehension,Python,Loops,Pandas,Dataframe,List Comprehension,我希望在一列中保留第一个值,而另一列不等于零。对于B列,值在-1、0和1之间交替。对于C列,值等于任何整数。目标是在B列等于零时保持C列的第一个值。当前数据帧如下所示: A B C 1 8 1 9 2 2 1 1 3 3 0 7 4 9 0 8 5 5 0 9 6 6 0 1 7 1 1 9 8 6 1 10 9 3 0 4 10 8 0 8 11 5 0 9 12 6 0 10 A B C
A B C
1 8 1 9
2 2 1 1
3 3 0 7
4 9 0 8
5 5 0 9
6 6 0 1
7 1 1 9
8 6 1 10
9 3 0 4
10 8 0 8
11 5 0 9
12 6 0 10
A B C
1 8 1 9
2 2 1 1
3 3 0 7
4 9 0 7
5 5 0 7
6 6 0 7
7 1 1 9
8 6 1 10
9 3 0 4
10 8 0 4
11 5 0 4
12 6 0 4
13 3 1 9
生成的数据帧应如下所示:
A B C
1 8 1 9
2 2 1 1
3 3 0 7
4 9 0 8
5 5 0 9
6 6 0 1
7 1 1 9
8 6 1 10
9 3 0 4
10 8 0 8
11 5 0 9
12 6 0 10
A B C
1 8 1 9
2 2 1 1
3 3 0 7
4 9 0 7
5 5 0 7
6 6 0 7
7 1 1 9
8 6 1 10
9 3 0 4
10 8 0 4
11 5 0 4
12 6 0 4
13 3 1 9
您需要首先在列
C
中按条件创建NaN
s,然后按ffill
添加值:
mask = (df['B'].shift().fillna(False)).astype(bool) | (df['B'])
df['C'] = df.loc[mask, 'C']
df['C'] = df['C'].ffill().astype(int)
print (df)
A B C
1 8 1 9
2 2 1 1
3 3 0 7
4 9 0 7
5 5 0 7
6 6 0 7
7 1 1 9
8 6 1 10
9 3 0 4
10 8 0 4
11 5 0 4
12 6 0 4
13 3 1 9
或者使用,如果所有值的类型都是整数,则添加astype
:
mask = (df['B'].shift().fillna(False)).astype(bool) | (df['B'])
df['C'] = df['C'].where(mask).ffill().astype(int)
print (df)
A B C
1 8 1 9
2 2 1 1
3 3 0 7
4 9 0 7
5 5 0 7
6 6 0 7
7 1 1 9
8 6 1 10
9 3 0 4
10 8 0 4
11 5 0 4
12 6 0 4
13 3 1 9
两种解决方案在实施时都是正确的。谢谢,我很感激!我认为没有,因为缺少9:(检查新的解决方案我没有找到,谢谢。出于我的目的,此解决方案有效,因为C列是计算新值的辅助列。在B列最后一个0值下方延伸的行中似乎存在不匹配,这可能是由于B列上的移位。再次感谢!