Используя melt
:
u = df.melt(id_vars='ID', var_name='Attribute')
u.loc[u.value.eq('T'), ['ID', 'Attribute']]
ID Attribute
0 1 Male
3 2 Special_Need
4 1 Teeanger
AFAIK, стандарт для первой недели месяца отсутствует.
Первая неделя года - это неделя, содержащая 4 января
.
Как вы определяете первая неделя месяца?
ОБНОВЛЕНИЕ:
Вам нужно будет переписать ваш запрос следующим образом:
SELECT WEEK(dateField, 5) -
WEEK(DATE_SUB(dateField, INTERVAL DAYOFMONTH(dateField) - 1 DAY), 5) + 1
, чтобы переходы года обрабатывались правильно, а недели начинались в понедельник
.
В противном случае ваш запрос в порядке.
Существует альтернатива, которая иногда используется в отчетных базах данных. Это создание таблицы, назовем ее ALMANAC, которая имеет одну строку на дату (ключ) и имеет каждый необходимый атрибут даты, который может быть полезен для целей отчетности.
В дополнение к столбцу «неделя месяца», может быть столбец для того, является ли дата выходным днем компании и тому подобное. Если в вашей компании финансовый год начинается с июля или какого-то другого месяца, вы можете указать финансовый год, финансовый месяц, финансовую неделю и т. Д., К которым относится каждая дата.
Затем вы пишете одну программу для заполнения этой таблицы. из воздуха, учитывая диапазон дат для заселения. Вы включаете все сумасшедшие вычисления календаря только один раз в этой программе.
Затем, когда вам нужно узнать атрибут для даты в какой-то другой таблице, Вы просто делаете соединение и используете колонку. Да, это еще одно присоединение. И нет, эта таблица не нормализована. Но это все еще хороший дизайн для определенных очень специфических потребностей.