Преобразовать столбцы в значения строк, где столбец + строка имеет значение True - PullRequest
1 голос
/ 22 января 2020

У меня есть набор данных, который выглядит следующим образом:

    key f1  f2  f3      f4      f5
0   001 A   B   True    False   False
1   002 C   D   False   True    False
2   003 A   D   False   True    False
3   004 C   B   False   False   True

И я хотел бы использовать pandas для преобразования вышеупомянутого в:

    key f1  f2  state
0   001 A   B   f3
1   002 C   D   f4
2   003 A   D   f4
3   004 C   B   f5

Короче, если Значение строки для столбца - True, тогда метка столбца должна стать новым значением столбца с именем state.

Ответы [ 2 ]

3 голосов
/ 22 января 2020

Один из способов - использовать Dataframe.dot:

t = df.loc[:,'f3':]
df['state'] = t.dot(t.columns)

print(df.drop(t.columns, axis=1))

   key f1 f2 state
0    1  A  B    f3
1    2  C  D    f4
2    3  A  D    f4
3    4  C  B    f5

Или мы также можем использовать idxmax:

df['state'] = t.idxmax(1)
0 голосов
/ 22 января 2020

Мой коллега дал мне это, которое, кажется, работает точно так, как нужно.

pd.melt(df, id_vars=['key', 'f1', 'f2'],
       var_name = 'state')
      .query('value')
      .drop('value', axis=1)

Вывод:

    key f1  f2  state
0   001 A   B   f3
5   002 C   D   f4
6   003 A   D   f4
11  004 C   B   f5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...