2015-06-22 18 views
1

У меня есть кадр данных стиля:Найти общие значения в столбцах панды dataframe

animal animal 
A Dog  Dog 
B Cat  Cat 
C Pig  Pig 
D Cat  Dog 

Различные записи в строке D говорят мне, что есть ошибка. Мне нужно удалить все строки, где животные не совпадают. У столбцов есть одно и то же имя.

Я уверен, что это должно быть просто! Большое спасибо.

+0

Из любопытства, как вы получили DataFrame со столбцами с тем же именем? Можете ли вы заставить их по-другому? 'df.columns = ['animal1', 'animal2']'. – chrisaycock

+0

Спасибо - я унаследовал dataframe. –

+1

Проверьте источник. Если кому-то интересно, данные были получены: pd.concat ([df1, df2], axis = 1) –

ответ

1

Подготовительный код генерирует блок данных с той же структурой, что и ваш. Интересно, что мне не удалось назвать столбцы animal и присоединиться к suffix = ("","") - это вызывает ошибку ValueError: columns overlap but no suffix specified: Index([u'animal'], dtype='object'). Комментарий @ chrisaycock для переименования столбцов работает отлично.

import pandas as pd 

# prepare the dataframe 
a1 = ['Dog','Cat','Pig','Cat'] 
a2 = ['Dog','Cat','Pig','Dog'] 
df1 = pd.DataFrame({"ani": a1}) 
df2 = pd.DataFrame({"ani": a2}) 
# trickery required to get two columns with the same name 
df = pd.merge(df1, df2, left_index=True,right_index = True, suffixes=("mal", "mal")) 

# fix the column names 
df.columns = ['animal1', 'animal2'] 

# keep only matching rows 
df = df[df.animal1 == df.animal2] 
-1

Итерирование через фрейм данных на основе индекса и проверка на возвращаемое значение.

>>> for i in df.index: 
...  if len(set(df.ix[i])) != 1: 
...    df.drop(i) 
+0

Итерация по DataFrame крайне субоптимальна. – chrisaycock

Смежные вопросы