Первая публикация вопроса от новичка, открытого для предложений и улучшений.
Я пытаюсь создать новый столбец в кадре данных.Новый столбец для каждой строки должен быть заполнен следующим образом:
1) «Неизвестно», если все выбранные столбцы в этой строке содержат значение «Нет».
2) НеЗначение «Нет», если один из столбцов содержит такое значение.
В наборе данных, который я использую, будет только одно значение, отличное от «Нет», если оно есть, на строку, а имя столбца будетто же самое, что и значение ячейки.
Я знаю, что мог бы пройтись по каждой строке, чтобы найти в этих столбцах значение, отличное от «Нет», и, если он был найден, установить для него значение столбца (в противном случае установить значение «Неизвестно»), но я чувствую, что упускаю что-то простое, чтобы заставить это работать.
Я смотрел на выбор значения с помощью .loc / .iloc / .at и нескольких других методов, но я нечувствую, что я уже близко.
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['None', 'None', 'None', 'None'],
'B': ['None', 'B', 'None', 'None'],
'C': ['None', 'None', 'C', 'None'],
'D': ['None', 'None', 'None', 'D']})
values = ['B', 'C', 'D']
#In the code below, replace the string 'This should be non-None value (B, C or D)' with an expression
df['Letter'] = pd.np.where(df[values].eq(values).any(1, skipna=True),
'This should be non-None value (B, C or D)', 'Unknown')
print(df)
A B C D Letter
0 None None None None Unknown
1 None B None None This should be non-None value (B, C or D)
2 None None C None This should be non-None value (B, C or D)
3 None None None D This should be non-None value (B, C or D)