Как создать новый фрейм данных в соответствии с именем столбца, в котором существует значение? - PullRequest
1 голос
/ 24 февраля 2020

У меня есть pandas фрейм данных:

 Index   0   1   2
     0   0   1   0
     1   0   0   1
     2   1   0   0
     3   0   0   1

Как создать новый фрейм данных в соответствии с именем столбца, в котором существует значение или когда значение = 1?

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

 Index   type
     0    1
     1    2
     2    0
     3    2

Ответы [ 3 ]

2 голосов
/ 24 февраля 2020

Используйте DataFrame.dot, если только 1 или 0 значения в столбцах:

#if Index is not column, but index
df['type'] = df.dot(df.columns)
#if Index is column or necessary omit first column
#df['type'] = df.iloc[:, 1:].dot(df.columns[1:])
print (df)
       0  1  2 type
Index              
0      0  1  0    1
1      0  0  1    2
2      1  0  0    0
3      0  0  1    2

Решение также работает правильно, если нет 1 значения в строке, затем верните пустая строка:

df['type'] = df.dot(df.columns)
print (df)
       0  1  2 type
Index              
0      0  0  0     
1      0  0  1    2
2      1  0  0    0
3      0  0  1    2
1 голос
/ 24 февраля 2020

Как кажется, чайники. Вы также можете использовать pandas.DataFrame.idxmax

>>> df['type'] = df.idxmax(axis=1)
>>> df
   0  1  2 type
0  0  1  0    1
1  0  0  1    2
2  1  0  0    0
3  0  0  1    2
1 голос
/ 24 февраля 2020

Вот способ использования np.nonzero

_, df['type'] = np.nonzero(df.values)

print(df)

   0  1  2  type
0  0  1  0     1
1  0  0  1     2
2  1  0  0     0
3  0  0  1     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...