Python - Панды, как уменьшить строку данных, имеющую то же значение?

1

во-первых, у меня есть один фрейм данных, который сливается из двух фреймов данных

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

  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

я попробовал "группу", но результаты очень странные :(

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

Теги:
pandas
merge

1 ответ

0
Лучший ответ

Используйте 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
  • 0
    спасибо за ваше предложение, но кажется, что некоторые данные пропущены. возможно, это неправильно, так как эта строка -> df_com = df_dog.merge (df_cat, on = 'numid', how = 'inner'). set_index (['dog1', 'cat1'])
  • 0
    @Sungjin - я пробую ваши входные данные и получаю другой вывод. Итак, что ожидается от df_dog.merge(df_cat, on='numid').set_index(['dog1','cat1']) ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню