во-первых, у меня есть один фрейм данных, который сливается из двух фреймов данных
чтобы быть ясным,
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
я попробовал "группу", но результаты очень странные :(
заранее спасибо
Используйте 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
df_dog.merge(df_cat, on='numid').set_index(['dog1','cat1'])
?