Как подсчитать частоту повторения значений в столбце данных? - PullRequest
0 голосов
/ 19 марта 2019

У меня есть столбец в кадре данных, который

UC      WR
V001    A, B, C, nan, A, C, D
C001    nan, C, D, A, nan, A
C002    C, B, B, A, A, A
C003    A, C, A, C, B, nan

Я не уверен, что делаю неправильно, но я не могу избавиться от nan s.Из этого столбца я хочу иметь другой столбец или словарь, который дает мне счетчик частоты различных значений в WR.

UC     WR Count
V001  {A: 2, B:1, C:2, D:1}
C001  {A:2, C:1, D:1}
C002  {A:3, B:2, C:1}
C003  {A:2, B:1, C:2}

или аналогичный словарь.Спасибо!:)

Ответы [ 3 ]

3 голосов
/ 19 марта 2019

Сначала игнорируя записи nan, мой подход будет следующим:

df['WR Count'] = df.WR.str.replace(' ', '').str.split(',').apply(Counter)

#                          WR                                    WR Count
# UC                                                                                                        
# V001  A, B, C, nan, A, C, D  {'A': 2, 'B': 1, 'C': 2, 'nan': 1, 'D': 1}                               
# C001   nan, C, D, A, nan, A          {'nan': 2, 'C': 1, 'D': 1, 'A': 2}                               
# C002       C, B, B, A, A, A                    {'C': 1, 'B': 2, 'A': 3}                           
# C003     A, C, A, C, B, nan          {'A': 2, 'C': 2, 'B': 1, 'nan': 1} 

Обратите внимание, что если вы уверены, что разделитель всегда ', ', то вы можетежестко закодируйте его, что приводит к более короткой команде:

df['WR Count'] = df.WR.str.split(', ').apply(Counter)
1 голос
/ 19 марта 2019

Только не делайте dict в ячейке в pandas, что сделает много встроенных pandas 'хороших функций, которые больше не будут работать

df.set_index('UC').WR.\
 str.split(', ',expand=True).\
    stack().str.get_dummies().sum(level=0).drop('nan',1)
      A  B  C  D
UC              
V001  2  1  2  1
C001  2  0  1  1
C002  3  2  1  0
C003  2  1  2  0
0 голосов
/ 19 марта 2019

Чтобы получить значения в качестве словарей, вы также можете попробовать:

df['WR Count'] = df['WR'].apply(lambda x: dict(Counter(x.split(', ')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...