Pandas если значение равно 1, указать имя столбца - PullRequest
2 голосов
/ 06 августа 2020

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

   Blue  Red
0   0     0
1   1     0
2   0     1
3   0     0
4   0     0

Я хочу сказать, если значение равно 1, тогда укажите имя столбца. Итак, ожидаемый результат:

   Blue  Red
0   0     0
1   Blue  0
2   0     Red
3   0     0
4   0     0

Я почти сделал это очень сложным способом, я надеялся, что есть простой способ?

Ответы [ 2 ]

3 голосов
/ 06 августа 2020

Используйте DataFrame.mask с преобразованием columns в серию, чтобы избежать AttributeError: 'Index' object has no attribute '_info_axis_number' (в некоторых более новых pandas версиях):

df = df.mask(df.eq(1), df.columns.to_series(), axis=1)
print (df)
   Blue  Red
0     0    0
1  Blue    0
2     0  Red
3     0    0
4     0    0

Альтернатива с numpy.where:

df = pd.DataFrame(np.where(df.eq(1), df.columns, df), 
                  index=df.index, 
                  columns=df.columns)
print (df)
   Blue  Red
0     0    0
1  Blue    0
2     0  Red
3     0    0
4     0    0
1 голос
/ 06 августа 2020

Это итерация по столбцам и строкам: рассмотрим, что фрейм данных - df1:

for name in df1.columns:
    for row in df1.index:
        if df1.loc[row,name] == 1:
            df1.loc[row,name] = name

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