Добавить столбец к pandas df в зависимости от условия условия - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть df с именем lin_reg_df с двумя столбцами Surface_Elevation_mAHD и Adopted_SS_WL. DF содержит измерения каждой из 88 скважин подземных вод, каждая из которых имеет конкретное название скважины. lin_reg_df индексируется как well name.
Я хочу добавить еще один столбец к df, который называется Aquifer_Type и указывает, является ли скважина deep или shallow. Названия лунок всех deep лунок содержатся в списке под названием deep_wells, а мелкие лунки - в shallow_wells. Я хочу просмотреть циклы по именам лунок (индекс df), и если имя лунки указано в список с именем deep_wells Я хочу поместить deep в столбец Aquifer_Type. Если он указан в списке под названием shallow_wells, я хочу поместить shallow в столбец Aquifer_Type.
Я попытался использовать isin в l oop, но не смог заставить его работать. Любой совет? `

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Всегда дайте данные, чтобы получить помощь быстрее

Данные

df=pd.DataFrame({'Surface_Elevation_mAHD':[3,4,6,7.8,9,2,5],'Adopted_SS_WL':[1,2,3,4,5,6,7],'well name':['WQ','RT','KL','SZ','TR','YH','YP']})
df

Списки

deep_wells=['WQ','RT','YH','YP']
shallow_wells=['KL','SZ','TR']

Еще один способ - использовать np.where для numpy.where(condition,yes,no)

df['Aquifer_Type']= np.where(df['well name'].isin(shallow_wells), 'shallow_wells', 'deep_wells')
df

Если ваш номер скважины является индексом. Пожалуйста, сбросьте его перед применением np.wehere. Вы делаете это df.reset_index(inplace=True)

0 голосов
/ 17 апреля 2020

Я попытался создать минимальный пример из вашей информации со следующим кодом:

well_name = ['a','b','c','d','e','f','g']
deep_wells = ['a','c','g']
shallow_wells = ['b','d','e','f']

lin_reg_df = pd.DataFrame({'Surface_Elevation_mAHD ': [1,2,3,4,5,6,7],
                           'Adopted_SS_WL': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]})
lin_reg_df.index = well_names

, поэтому мой DataFrame изначально выглядит так:

    Surface_Elevation_mAHD  Adopted_SS_WL
a   1                       0.1
b   2                       0.2
c   3                       0.3
d   4                       0.4
e   5                       0.5
f   6                       0.6
g   7                       0.7

Я бы тогда просто использовал это фрагмент кода для выполнения работы:

for well in well_name:
    if well in deep_wells:
        lin_reg_df.loc[well, 'Aquifier_Type'] = 'deep'
    elif well in shallow_wells:
        lin_reg_df.loc[well, 'Aquifier_Type'] = 'shallow'

Вывод будет:

    Surface_Elevation_mAHD  Adopted_SS_WL   Aquifier_Type
a   1                       0.1             deep
b   2                       0.2             shallow
c   3                       0.3             deep
d   4                       0.4             shallow
e   5                       0.5             shallow
f   6                       0.6             shallow
g   7                       0.7             deep
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...