Флаги, если определенные условия присутствуют для столбцов

у меня есть дф

Key1   Key2   Condition   Value1   Value2
K1     K2        1          10       202
K1     K2        2          610      206
K1     K2        3          130      250
K11     K21      1          150      270
K11     K21      3          510      20
K13     K23      2          32        5

Теперь мне нужны флаги для всех условий 1,2,3 для всех комбинаций ключевых значений.

  • Например, K1,K2 имеет все 3 условия 1,2,3 и 3 строки, по одной соответствующей каждому условию. Таким образом, флаг для всех условий будет Да
  • Ключи К11,К21 имеют только условия 1 и 3, условие2 отсутствует. Так что флаги для 1 и 3 будут да.
  • Ключи К13,К23 имеют только условие 2, условия 1 и 3 отсутствуют. Флаг для условия2 будет да.

Ожидаемый результат

Key1   Key2    Condition1  Condition2   Condition3 
K1       K2       Yes        Yes         Yes     
K11     K21       Yes        No          Yes 
K13     K23       No         Yes         No  

Похоже, вы должны написать код...

Julien 14.12.2020 07:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте DataFrame.pivot_table с DataFrame.notna для проверки отсутствия пропущенных значений и DataFrame.add_prefix

DataFrame для логического значения:

df = (df.pivot_table(index=['Key1','Key2'], columns='Condition', aggfunc='size')
        .notna()
        .add_prefix('Condition'))
print (df)
Condition  Condition1  Condition2  Condition3
Key1 Key2                                    
K1   K2          True        True        True
K11  K21         True       False        True
K13  K23        False        True       False

Если вам нужны значения yes, no, используйте numpy.where:

df1 = pd.DataFrame(np.where(df, 'Yes','No'), index=df.index, columns=df.columns)
print (df1)
Condition Condition1 Condition2 Condition3
Key1 Key2                                 
K1   K2          Yes        Yes        Yes
K11  K21         Yes         No        Yes
K13  K23          No        Yes         No

Последнее, если вам нужно MultiIndex для столбцов:

df1 = df1.reset_index().rename_axis(None, axis=1)
print (df1)
  Key1 Key2 Condition1 Condition2 Condition3
0   K1   K2        Yes        Yes        Yes
1  K11  K21        Yes         No        Yes
2  K13  K23         No        Yes         No

Другие вопросы по теме