Как заменить значение в зависимости от «столбцов идентификаторов» и дополнительного условия в кадре данных pandas? - PullRequest
1 голос
/ 07 июля 2019

В рамках некоторой очистки данных мне нужно «выровнять» значения в «столбце A» для каждой комбинации «год» и «ID» в зависимости от того, есть ли какое-либо значение = 1 в «столбце A» для «года» комбинация 'и' ID '

Я уже пробовал np.where(), но получил только ValueError: Can only compare identically-labeled Series objects

Вот краткий пример Dataframe:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([[1, 2007, 0], 
                       [2, 2008, 0], 
                       [2, 2009, 1], 
                       [3, 2007, 0], 
                       [4, 2010, 0], 
                       [4, 2011, 1], 
                       [4, 2011, 0]]), #I want to change this 0 to 1
             columns=['ID', 'Year', 'ColA'])

результат должен выглядеть следующим образом:

result = pd.DataFrame(np.array([[1, 2007, 0], 
                       [2, 2008, 0], 
                       [2, 2009, 1], 
                       [3, 2007, 0], 
                       [4, 2010, 0], 
                       [4, 2011, 1], 
                       [4, 2011, 1]]),
             columns=['ID', 'Year', 'ColA'])

1 Ответ

0 голосов
/ 07 июля 2019

Мы можем использовать groupby.transform с any.Затем мы получаем boolean обратно, поэтому, если мы преобразуем его в int с astype, мы получим желаемый результат:

m = df.groupby(['ID', 'Year'])['ColA'].transform(any).astype(int)
df['ColA'] = m
   ID  Year  ColA
0   1  2007     0
1   2  2008     0
2   2  2009     1
3   3  2007     0
4   4  2010     0
5   4  2011     1
6   4  2011     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...