Squeak.ru - шаблоны программирования

Создайте несколько новых столбцов на основе нескольких условий в Pandas

Я пытаюсь получить новые столбцы a и b на основе следующего фрейма данных:

      a_x  b_x    a_y  b_y
0   13.67  0.0  13.67  0.0
1   13.42  0.0  13.42  0.0
2   13.52  1.0  13.17  1.0
3   13.61  1.0  13.11  1.0
4   12.68  1.0  13.06  1.0
5   12.70  1.0  12.93  1.0
6   13.60  1.0    NaN  NaN
7   12.89  1.0    NaN  NaN
8   11.68  1.0    NaN  NaN
9     NaN  NaN   8.87  0.0
10    NaN  NaN   8.77  0.0
11    NaN  NaN   7.97  0.0

Если b_x или b_y равны 0.0 (в этом случае они имеют одинаковые значения, если они оба существуют), то a_x и b_y имеют одинаковые значения, поэтому я беру любой из них в качестве новых столбцов a и b; если b_x или b_y равны 1.0, это разные значения, поэтому я вычисляю средние значения a_x и a_y как значения a, беру b_x и b_y как b;

Если a_x, b_x или a_y, b_y не равно нулю, я возьму существующие значения как a и b.

Мои ожидаемые результаты будут такими:

      a_x  b_x    a_y  b_y       a  b
0   13.67  0.0  13.67  0.0  13.670  0
1   13.42  0.0  13.42  0.0  13.420  0
2   13.52  1.0  13.17  1.0  13.345  1
3   13.61  1.0  13.11  1.0  13.360  1
4   12.68  1.0  13.06  1.0  12.870  1
5   12.70  1.0  12.93  1.0  12.815  1
6   13.60  1.0    NaN  NaN  13.600  1
7   12.89  1.0    NaN  NaN  12.890  1
8   11.68  1.0    NaN  NaN  11.680  1
9     NaN  NaN   8.87  0.0   8.870  0
10    NaN  NaN   8.77  0.0   8.770  0
11    NaN  NaN   7.97  0.0   7.970  0

Как я могу получить результат выше? Спасибо.


Ответы:


1

Использовать:

#filter all a and b columns 
b = df.filter(like='b')
a = df.filter(like='a')
#test if at least one 0 or 1 value
m1 = b.eq(0).any(axis=1)
m2 = b.eq(1).any(axis=1)

#get means of a columns
a1 = a.mean(axis=1)
#forward filling mising values and select last column
b1 = b.ffill(axis=1).iloc[:, -1]
a2 = a.ffill(axis=1).iloc[:, -1]

#new Dataframe with 2 conditions
df1 = pd.DataFrame(np.select([m1, m2], [[a2, b1], [a1, b1]]), index=['a','b']).T
#join to original
df = df.join(df1)
print (df)
      a_x  b_x    a_y  b_y       a    b
0   13.67  0.0  13.67  0.0  13.670  0.0
1   13.42  0.0  13.42  0.0  13.420  0.0
2   13.52  1.0  13.17  1.0  13.345  1.0
3   13.61  1.0  13.11  1.0  13.360  1.0
4   12.68  1.0  13.06  1.0  12.870  1.0
5   12.70  1.0  12.93  1.0  12.815  1.0
6   13.60  1.0    NaN  NaN  13.600  1.0
7   12.89  1.0    NaN  NaN  12.890  1.0
8   11.68  1.0    NaN  NaN  11.680  1.0
9     NaN  NaN   8.87  0.0   8.870  0.0
10    NaN  NaN   8.77  0.0   8.770  0.0
11    NaN  NaN   7.97  0.0   7.970  0.0

Но я думаю, что решение должно быть упрощено, потому что для обоих условий следует использовать среднее значение (поскольку среднее значение тех же значений такое же, как и первое значение):

b = df.filter(like='b')
a = df.filter(like='a')
m1 = b.eq(0).any(axis=1)
m2 = b.eq(1).any(axis=1)

a1 = a.mean(axis=1)
b1 = b.ffill(axis=1).iloc[:, -1]


df['a'] = a1
df['b'] = b1
print (df)
      a_x  b_x    a_y  b_y       a    b
0   13.67  0.0  13.67  0.0  13.670  0.0
1   13.42  0.0  13.42  0.0  13.420  0.0
2   13.52  1.0  13.17  1.0  13.345  1.0
3   13.61  1.0  13.11  1.0  13.360  1.0
4   12.68  1.0  13.06  1.0  12.870  1.0
5   12.70  1.0  12.93  1.0  12.815  1.0
6   13.60  1.0    NaN  NaN  13.600  1.0
7   12.89  1.0    NaN  NaN  12.890  1.0
8   11.68  1.0    NaN  NaN  11.680  1.0
9     NaN  NaN   8.87  0.0   8.870  0.0
10    NaN  NaN   8.77  0.0   8.770  0.0
11    NaN  NaN   7.97  0.0   7.970  0.0
23.12.2019
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...