我有一个这样的数据帧,每行代表一个人做的一些旅行:
IndividualID Ifmarried Sex Trip1 Trip2 Trip3 Trip4 Trip5 Trip6 Trip7 Trip8 Trip9
200100001 1 2 23 1 2 4 4 4 1 5 5
200100002 1 1 21 2 12 3 1 55 7 7
200100003 2 1 12 3 1 6 3
200100004 1 2 1
200100005 1 2 6 5 1 9 3 5 6
200100006 1 2 23 4 4 1 4 3 6 5
我想做的是:
对于每一行,如果存在值为1的行程,则删除所有以下行程.
所以希望新数据框看起来像这样:
IndividualID Ifmarried Sex Trip1 Trip2 Trip3 Trip4 Trip5 Trip6 Trip7 Trip8 Trip9
200100001 1 2 23 1
200100002 1 1 21 2 12 3 1
200100003 2 1 12 3 1
200100004 1 2 1
200100005 1 2 6 5 1
200100006 1 2 23 4 4 1
请注意,在’Ifmarried’和’Sex’栏中也可能有’1′,所以我必须确保它们不会与旅行混淆.
提前致谢!
最佳答案 使用双cumsum技巧:
v = df.filter(like='Trip')
df.iloc[:, 3:] = v[v.eq(1).cumsum(1).cumsum(1).le(1)].fillna('')
df
IndividualID Ifmarried Sex Trip1 Trip2 Trip3 Trip4 Trip5 Trip6 Trip7 \
0 200100001 1 2 23 1
1 200100002 1 1 21 2 12 3 1
2 200100003 2 1 12 3 1
3 200100004 1 2 1
4 200100005 1 2 6 5 1
5 200100006 1 2 23 4 4 1
Trip8 Trip9
0
1
2
3
4
5