2015-11-09 3 views
2

У меня есть DataFrame A, как указано ниже, и я хочу найти строки с одинаковыми значениями в своих первых трех столбцах.Как найти одинаковые строки в DataFrame - python

import pandas as pd 
import io 
import numpy as np 
import datetime 
A= """ 
    c0 c1 c2 c3 c4 
0 1 a d 3 4 
1 1 a c 0 0 
2 1 a d 3 1 
3 1 b c 0 0 
4 2 b d 8 5 
5 2 b d 3 3 
    """ 

df = pd.read_csv(io.StringIO(A), delimiter='\s+') 
df2= pd.DataFrame(df, columns=['c0', 'c1', 'c2']) 
for i in range(0,4): 
    row1 = df2.irow(i) 
    row2 = df2.irow(i+1) 
    val=all(unique_columns = row1 != row2) 
    print(i) 

Я хочу, чтобы напечатать 2, 5.

Ну, это не сработает, даже если бы он не смог получить строки, которые следуют друг за другом.

В качестве альтернативы, я попробовал np.unique(df2), чтобы узнать, отличается ли число столбцов от df2, что тоже не сработало.

Любая помощь приветствуется.

+1

... но только строка 2 имеет то же значение в с0 c2 как строка 0, строки 6 делают не. –

+0

@CTZhu, да, но строка 5 имеет то же значение, что и строка 4. – Ana

ответ

4

IIUC затем использовать duplicated:

In [132]: 
df2.index[df2.duplicated()] 

Out[132]: 
Int64Index([2, 6], dtype='int64') 

Так что это работает, потому что он определяет, когда любая строка имеет повторяющиеся значения, поскольку df2 является подмножество перевалов, представляющего интереса, то все столбцы проверяются.

EDIT

df2 кажется излишним здесь вы можете просто сделать:

In [133]: 
df.index[df.duplicated(subset=['c0', 'c1', 'c2'])] 

Out[133]: 
Int64Index([2, 6], dtype='int64') 
+0

Возможно включить 'подмножество', так как нужны только первые 3 столбца. – Leb

+0

@Leb не нужно, потому что 'df2' уже является подмножеством' df' – EdChum

+0

. Вы правы, OP, возможно, потребуется рассмотреть возможность удаления df2 для предотвращения ненужных шагов и, возможно, удвоения данных. – Leb

1
In [211]: a.groupby(['c0','c1','c2']).indices 
Out[211]: 
{(1, 'a', 'c'): array([1]), 
(1, 'a', 'd'): array([0, 2]), 
(1, 'b', 'c'): array([3]), 
(2, 'b', 'd'): array([4, 5])} 

Это должно сделать трюк.

+0

Это здорово, когда вы действительно заботитесь о группах и хотите классифицировать свои данные. Благодарю. – Ana

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