2016-11-18 10 views
3

у меня есть dataframe («DF»), что эквивалентно:Python панды значения х столбцов подмножество на основе уникальных значений в столбце у

Cat Data 
    x 0.112 
    x 0.112 
    y 0.223 
    y 0.223 
    z 0.112 
    z 0.112 

Другими словами у меня есть столбец категории и столбец данных, а также значения данных не изменяются в пределах значений столбца категории, но они могут повторяться между разными категориями (т.е. значения в категориях «x» и «z» одинаковы - 0.112). Это означает, что мне нужно выбрать одну точку данных из каждой категории, а не просто подмножество уникальных значений «Данные».

То, как я сделал это так:

aLst = [] 
    bLst = [] 
    for i in df.index: 
     if df.loc[i,'Cat'] not in aLst: 
      aLst += [df.loc[i,'Cat']] 
      bLst += [i] 

    new_series = pd.Series(df.loc[bLst,'Data']) 

Тогда я могу делать все, что я хочу с ним. Но проблема в том, что это просто похоже на неуклюжий, не-питонический способ делать что-то. Какие-либо предложения?

ответ

3

Я думаю, что вам нужно drop_duplicates:

#by column Cat 
print (df.drop_duplicates(['Cat'])) 
    Cat Data 
0 x 0.112 
2 y 0.223 
4 z 0.112 

Или:

#by columns Cat and Value 
print (df.drop_duplicates(['Cat','Data'])) 
    Cat Data 
0 x 0.112 
2 y 0.223 
4 z 0.112 
+0

Наиболее полезным. Благодарю. Хотя я на самом деле хочу только данные, поэтому я думаю, что я в конце концов хочу использовать: new_frame = df.loc [df.drop_duplicates ('Cat'). Index, 'Data'] –

+0

Супер, другое решение - 'print (x.drop_duplicates ('Cat'). drop ('Cat', axis = 1) .squeeze()) 'или' print (x.drop_duplicates ('Cat'). drop ('Cat', axis = 1) [ 'Data']) ' – jezrael

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

  • Нет связанных вопросов^_^