#python #pandas #dataframe
Вопрос:
Я дал условие, чтобы заполнить новый столбец на строку, которая была Game [Type A, Type B, Type C]: Played, ELSE: Status
, по идее это если Game
столбец имеет любой из элементов в списке, который является Type A
или Type B
, либо Type C
, то новый столбец должен иметь строку Played
, и если Game
есть другие строки, которые не указаны в списке, тогда новый столбец должен иметь значение в соответствующем столбце Status
.
full_string = "Game [Type A, Type B, Type C]: Played, ELSE: Status"
Из полной строки мне удалось получить список параметров, имена столбцов и параметр «Еще». Они находятся в следующих переменных:
options = ['Type A', 'Type B', 'Type C'] #this is a list
col_to_check = 'Game'
value_if_met = 'Played'
else_use_col = 'Status'
new_col_name = 'Result'
Я не знаю, как я могу заполнить new_col_name
, используя вышеуказанные данные для следующего кадра данных?
df = pd.DataFrame( { 'ID': ['AB01', 'AB02', 'AB03', 'AB04', 'AB05','AB06'], 'Game': ['Type A','Type B','Type A','Type C','Type D','Type D'], 'Status': ['Won', 'Draw', 'Won', np.nan, 'Won',np.nan] } )
Новый столбец должен содержать 'Result':['Played','Played','Played','Played','Won',np.nan]
указанный выше фрейм данных.
Ответ №1:
Вы можете использовать numpy.where
функцию, чтобы получить требуемые значения; используйте .isin
метод , чтобы проверить, является ли значение столбца Game
одним из [Type A, Type B, Type C]
, назначить Played
True
значения и назначить Status
значения столбцов для значений False
:
gt;gt;gt; np.where(df['Game'].isin(['Type A', 'Type B', 'Type C']), ['Played'], df['Status']) array(['Played', 'Played', 'Played', 'Played', 'Won', nan], dtype=object)
Вы можете назначить его в качестве нового столбца:
df['Result'] = np.where(df['Game'].isin(['Type A', 'Type B', 'Type C']), ['Played'], df['Status']) ID Game Status Result 0 AB01 Type A Won Played 1 AB02 Type B Draw Played 2 AB03 Type A Won Played 3 AB04 Type C NaN Played 4 AB05 Type D Won Won 5 AB06 Type D NaN NaN