Панды: Как найти количество уникальных элементов для одного столбца, приходящего из другого столбца? - PullRequest
1 голос
/ 26 апреля 2019

У меня есть такой фрейм данных:

import numpy as np
import pandas as pd

df = pd.DataFrame({'carrier': ['c1','c1','c1','c2','c2','c2','c3','c4','c5','c5'],
                   'airport': ['a1','a3','a1','a1','a2','a2','a3','a4','a4','a1'],
                  })

df

  carrier airport  
0      c1      a1  
1      c1      a3  
2      c1      a1  
3      c2      a1  
4      c2      a2  
5      c2      a2  
6      c3      a3  
7      c4      a4  
8      c5      a4  
9      c5      a1  

Я хочу найти количество перевозчиков, которые обслуживали аэропорт, так чтобы аэропорт обслуживался как минимум двумя разными перевозчиками.

Как это сделать?

Требуемый выход:

airport carrier n_carrier
a1  c1  3  # airport a1 is served by 3 distinct carriers
a3  c1  2  # airport a3 is served by 2 distinct carriers
a1  c2  3  # NOTE: here we do not see a2 because it has only
a3  c3  2  #       one carrier, so it is excluded
a4  c4  2
a4  c5  2  # airport a4 is served by 2 distinct carriers
a1  c5  3

1 Ответ

1 голос
/ 26 апреля 2019
df = pd.DataFrame({'carrier': ['c1','c1','c1','c2','c2','c2','c3','c4','c5','c5'],
                   'airport': ['a1','a3','a1','a1','a2','a2','a3','a4','a4','a1'],
                  })

df['unique'] = df.groupby(['airport'])['carrier'].transform('nunique')
df[df['unique'].gt(1)].drop_duplicates().reset_index(drop = True)

carrier airport unique
0   c1     a1   3
1   c1     a3   2
2   c2     a1   3
3   c3     a3   2
4   c4     a4   2
5   c5     a4   2
6   c5     a1   3

Это должно дать вам то, что вы ищете. Превратите группу в число уникальных, затем посмотрите только на те, которые больше 1, и отбросьте дубликаты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...