我有一个数据框和一个索引列表,我想获取一个新的数据框,以便对于每个索引(从给定的最后一个开始),我将采用与给定列的值匹配的所有前面的行在索引处。
C1 C2 C3
0 1 2 A
1 3 4 A
2 5 4 A
3 7 5 B
4 9 7 C
5 2 3 D
6 1 1 D
列c3的索引(行号)2、4、5是我的新数据帧:
C1 C2 C3
0 1 2 A
1 3 4 A
2 5 4 A
4 9 7 C
5 2 3 D
说明:
对于索引2,选择了行0,1,2,因为C3全部相等。
对于索引4,没有前一行有效。
对于索引5,也没有任何前一行有效,而第6行是不相关的,因为它不在前面。 最好的方法是什么?
答案 0 :(得分:1)
如果要使前面的行与条件匹配,则可以设置条件以过滤数据。
{input}{input}
出局:
{input}{input}{input}
在其他列上应用
ind= 2
col ='C3'
# ".loc[np.arange(ind+1)]" creates indexes till preceding row, so rest of matching conditions can be ignored
df.loc[df.loc[ind][col] == df[col]].loc[np.arange(ind+1)].dropna()
出局:
C1 C2 C3
0 1 2 A
1 3 4 A
2 5 4 A