Python - Панды, как уменьшить строку данных, имеющую то же значение? - PullRequest
0 голосов
/ 19 октября 2018

Прежде всего, у меня есть один фрейм данных, который объединен из двух фреймов данных

, чтобы быть понятным,

  df_dog          df_cat
dog1  numid     cat1 numid
abc   n11       122  n11
abc   n21       123  n21
abc   n31       123  n31
abd   n41       121  n41
abd   n41       121  n31

я преобразовал данные в вектор на

df_com = df_dog.merge(df_cat, on='numid', how='inner').set_index(['dog1','cat1'])

pd.get_dummies(df_com.numid).sort_index(level=0)

, и результат отображается как

          n11 n21 n31 n41 
dog1 cat1
abc  122   1   0   0   0
abc  123   0   1   0   0
abc  123   0   0   1   0
abc  121   0   0   0   1
abc  121   0   0   1   0

, рассмотренный на

    abc  123   0   1   0   0
    abc  123   0   0   1   0
    abc  121   0   0   0   1
    abc  121   0   0   1   0

, есть дублирующаяся строка 'abc 123' и 'abc 121'

Итак, я хотел бы уменьшить эти дублированные данные, но все же хотел бы оставить оба значения, чтобы быть очевидным, я хотел бы видеть результат как

          n11 n21 n31 n41 
dog1 cat1
abc  122   1   0   0   0
abc  123   0   1   1   0
abc  121   0   0   1   1

Я пытался «сгруппировать по»но результаты очень странные: (

заранее спасибо

1 Ответ

0 голосов
/ 19 октября 2018

Используйте max по обоим уровням:

pd.get_dummies(df_com.numid).sort_index(level=0).max(level=[0,1])

print (df)
           n11  n21  n31  n41
dog1 cat1                    
abc  122     1    0    0    0
     123     0    1    1    0
     121     0    0    1    1

Ответ с входными данными:

df_com = df_dog.merge(df_cat, on='numid').set_index(['dog1','cat1'])
print (df_com)
          numid
dog1 cat1      
abc  122    n11
     123    n21
     123    n31
     121    n31
abd  121    n41
     121    n41

print (pd.get_dummies(df_com.numid).sort_index(level=0))
           n11  n21  n31  n41
dog1 cat1                    
abc  121     0    0    1    0
     122     1    0    0    0
     123     0    1    0    0
     123     0    0    1    0
abd  121     0    0    0    1
     121     0    0    0    1

df = pd.get_dummies(df_com.numid).sort_index(level=0).max(level=[0,1])
print (df)
           n11  n21  n31  n41
dog1 cat1                    
abc  121     0    0    1    0
     122     1    0    0    0
     123     0    1    1    0
abd  121     0    0    0    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...