2017-01-31 2 views
1

У меня есть dataframe нижеКак выбрать строки, которая соответствует определенной строки

A B 
a0 1 
b0 1 
c0 2 
a1 3 
b1 4 
b2 3 

Во-первых, если df.A StartsWith "a", я хотел бы сократить df.

df[df.A.str.startswith("a")]

A B 
a0 1 
a1 3 

Поэтому я хотел бы, чтобы сократить ФР, как показано ниже.

sub1

A B 
a0 1 
b0 1 
c0 2 

sub2

A B 
a1 3 
b1 4 
b2 3 

тогда Я хотел бы извлечь строки, в которых столбец В число соответствует строки столбца A StartsWith которых "a"

sub1

A B 
a0 1 
b0 1 

sub2

A B 
a1 3 
b2 3 

затем добавить.

result

A B 
a0 1 
b0 1 
a1 3 
b2 3 

Как можно вырезать и добавить df как это.

Я пробовал cut метод, но не работал.

ответ

1

Я думаю, что вы можете использовать where с mask для создания NaN которые вперед заполнены B значений с ffill:

Уведомление необходимо значения начинается с a должен быть первым в каждой группе для использования ffill

print (df.B.where(df.A.str.startswith("a"))) 
0 1.0 
1 NaN 
2 NaN 
3 3.0 
4 NaN 
5 NaN 
Name: B, dtype: float64 


print (df.B.where(df.A.str.startswith("a")).ffill()) 
0 1.0 
1 1.0 
2 1.0 
3 3.0 
4 3.0 
5 3.0 
Name: B, dtype: float64 

df = df[df.B == df.B.where(df.A.str.startswith("a")).ffill()] 
print (df) 
    A B 
0 a0 1 
1 b0 1 
3 a1 3 
5 b2 3 
Смежные вопросы