谢谢你帮我:
我有一些按日期排序的数据,并通过SQL分区按命令输入行号,就像下面的输出:
id string_value is_question row_number
1 string-1 0 1
1 string-2 0 2
1 string-3 0 3
1 string-4 1 4
1 string-5 0 5
2 string-1 0 1
2 string-2 0 2
2 string-3 1 3
2 string-4 0 4
2 string-5 0 5
...列is_question表示此字符串具有我感兴趣的值。
问题是:如何在row_number=1(总是第一个)和is_question等于1(期望的结尾)之间选择行,输出为:
id string_value row_number
1 string-1 1
1 string-2 2
1 string-3 3
1 string-4 4
2 string-1 1
2 string-2 2
2 string-3 3
...发布于 2022-05-31 00:02:57
一种方法是为每个row_number ( is_question为1)查找1,然后(使用merge和筛选)删除row_number大于该id的每个id的所有行。例如:
questions = df[df['is_question'].eq(1)][['id', 'row_number']]
df1 = df.merge(questions, on='id', suffixes=['', '_y'])
df1[df1['row_number'] <= df1['row_number_y']].drop('row_number_y', axis=1)输出
id string_value is_question row_number
0 1 string-1 0 1
1 1 string-2 0 2
2 1 string-3 0 3
3 1 string-4 1 4
5 2 string-1 0 1
6 2 string-2 0 2
7 2 string-3 1 3https://stackoverflow.com/questions/72440947
复制相似问题