2014-11-17 3 views
1

Из набора данных, подобных этому, мне нужно найти максимальный ближайший предыдущий индекс для A. Кадр данных может быть большим, но он всегда должен найти последний предыдущий индекс, где второй столбец равен «A».найти предыдущий максимальный индекс в кадре данных с условным утверждением

index X 
1  A 
2  B 
3  C 
4  D 
5  E 
6  A 
7  B 
8  C 
9  D 
10 E 

Вот результат, который я ищу для достижения. Максимальный самый близкий предыдущий индекс для «А»

index X Y 
1  A 1 
2  B 1 
3  C 1 
4  D 1 
5  E 1 
6  A 6 
7  B 6 
8  C 6 
9  D 6 
10 E 6 

Нечто подобное.

for i in x: 
     max(if df[i][1] == 'A' and df[0] < df[i][0]]) 

ответ

1

Вы можете извлечь индекс столбца, где Х представляет собой 'A', используя, где:

In [11]: df['index'].where(df['X'] == 'A') 
Out[11]: 
0  1 
1 NaN 
2 NaN 
3 NaN 
4 NaN 
5  6 
6 NaN 
7 NaN 
8 NaN 
9 NaN 
Name: index, dtype: float64 

Похоже, вы просто хотите ffill это:

In [12]: df['index'].where(df['X'] == 'A').ffill() 
Out[12]: 
0 1 
1 1 
2 1 
3 1 
4 1 
5 6 
6 6 
7 6 
8 6 
9 6 
Name: index, dtype: float64 

и установка этого в столбец Y получает желаемый результат:

In [13]: df['Y'] = df['index'].where(df['X'] == 'A').ffill() 
Смежные вопросы