Заполнение пропущенных значений в датафрейме аналогичными значениями столбцов Python - PullRequest
0 голосов
/ 22 января 2019

У меня есть фрейм данных с некоторыми неравномерными распределениями значений - некоторые отсутствуют, а некоторые нет.

Данные выглядят так:

Utility    Location     ID       Name        Unit1      Mover1      Unit2    Mover2

500        Municipal    75       Glover      1A         GT                      
500        Municipal    75       Glover      2A         GT               
500                     75       Glover      3A         GT               
500        Municipal    75       Glover                             1A       GT           
500                     75       Glover                             2A       GT
500                     75       Glover                             3A       GT
.
.
51        Provincial    85       Toshi       1          CT          1B       CT           
51        Provincial    85       Toshi       2          CT          2B       CT
51        Provincial    85       Toshi       5          ST          5B1      ST

Я бы хотел заполнить и объединить фрейм данных, когда Unit1 = Unit2 и когда Mover1 = Mover2, но оставив только уже согласованные части - Toshi значения. Во-вторых, необходимо заполнить значения Location значениями, аналогичными значениям Name, ID и Utility - если любое из этих совпадений будет заполнено Location, использованным ранее.

Вывод будет выглядеть так:

Utility    Location     ID       Name        Unit1      Mover1      Unit2    Mover2

500        Municipal    75       Glover      1A         GT          1A       GT                  
500        Municipal    75       Glover      2A         GT          2A       GT         
500        Municipal    75       Glover      3A         GT          3A       GT                       
.
.
51        Provincial    85       Toshi       1          CT          1B       CT           
51        Provincial    85       Toshi       2          CT          2B       CT              
51        Provincial    85       Toshi       5          ST          5B1      ST

Есть ли простой способ сжать этот фрейм данных, как указано выше?

1 Ответ

0 голосов
/ 22 января 2019

Я могу только придумать это медленное решение (два apply с должны быть медленными). Для высокой производительности, пожалуйста, проверьте Python: Обоснование массива NumPy

df.groupby(['Utility','ID','Name']).apply(lambda x : x.apply(lambda y : sorted(y,key=pd.isna))).dropna()
Out[51]: 
   Utility    Location  ID    Name Unit1 Mover1 Unit2 Mover2
0      500   Municipal  75  Glover    1A     GT    1A     GT
1      500   Municipal  75  Glover    2A     GT    2A     GT
2      500   Municipal  75  Glover    3A     GT    3A     GT
6       51  Provincial  85   Toshi     1     CT    1B     CT
7       51  Provincial  85   Toshi     2     CT    2B     CT
8       51  Provincial  85   Toshi     5     ST   5B1      S
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...