Найти уникальные значения groupby / transform без None - PullRequest
0 голосов
/ 16 июня 2019

Отправной точкой является такой тип данных.

df = pd.DataFrame({'author': ['Jack', 'Steve', 'Greg', 'Jack', 'Steve', 'Greg', 'Greg'], 'country':['USA', None, None, 'USA', 'Germany', 'France', 'France'], 'c':np.random.randn(7), 'd':np.random.randn(7)})

  author  country         c         d
0  Jack   USA     -2.594532  2.027425
1  Steve  None    -1.104079 -0.852182
2  Greg   None    -2.356956 -0.450821
3  Jack   USA     -0.910153 -0.734682
4  Steve  Germany  1.025113  0.441512
5  Greg   France   0.218085  1.369443
6  Greg   France   0.254485  0.322768

Желаемый вывод - один столбец или несколько столбцов со странами автора.

0    [USA]          
1    [Germany]
2    [France] 
3    [USA]          
4    [Germany]
5    [France] 
6    [France] 

Не должно бытьсписок, но мое ближайшее решение на данный момент дает список в качестве вывода.Это могут быть отдельные столбцы.

df.groupby('author')['country'].transform('unique')

0    [USA]          
1    [None, Germany]
2    [None, France] 
3    [USA]          
4    [None, Germany]
5    [None, France] 
6    [None, France]

Есть ли простой способ удалить None из этого?

1 Ответ

1 голос
/ 16 июня 2019

Вы можете удалить пропущенные значения с помощью Series.dropna, вызвать SeriesGroupBy.unique и создать новый столбец с помощью Series.map:

df['new'] = df['author'].map(df['country'].dropna().groupby(df['author']).unique())
print (df)
  author  country         c         d        new
0   Jack      USA  0.453358 -1.983282      [USA]
1  Steve     None  0.011792  0.383322  [Germany]
2   Greg     None -1.551810  0.308982   [France]
3   Jack      USA  1.646301  0.040245      [USA]
4  Steve  Germany -0.211451  0.841131  [Germany]
5   Greg   France  1.049269 -0.813806   [France]
6   Greg   France -1.244549  1.009006   [France]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...