pandas dataframe берет строки перед определенными индексами - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть фрейм данных и список индексов, и я хочу получить новый фрейм данных, чтобы для каждого индекса (из указанного последнего) я взял все предыдущие строки, соответствующие значению данного столбца по указателю.

      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 не имеет значения, поскольку она не предшествует. Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы можете создать условия для фильтрации данных, если хотите, чтобы только предыдущие строки соответствовали условию.

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

заявка на другой столбец

ind= 2
col ='C2'
df.loc[df.loc[ind][col] == df[col]].loc[np.arange(ind+1)].dropna()

Из:

   C1   C2  C3
1   3.0 4.0 A
2   5.0 4.0 A
...