серия панд ищет словарь и обновляет счет - PullRequest
0 голосов
/ 05 ноября 2018

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

permute_lst=[('NN', 'shoe'), ('JJ', 'new'), ('NN', 'shirt'), ('JJ', 'vintage')]

Пример из серии панд такой:

df['term'][0] = [('NN', 'shoe'), ('NN', 'jacket'), ('NN', 'sock'), ('NN', 'coat'), ('JJ', 'glittering')]

Мой текущий код показан ниже.

permutation_mapping = defaultdict(int) 
for p in permute_lst:
    k, v = p, 0
    for i in range(len(df['term'])): 
        for tup in df['term'][i]:
             if tup in permutation_mapping:
                permutation_mapping[k] = permutation_mapping.get(k, 0)+1

В результате я получил пустой словарь defaultdict(int, {})

Что я ожидаю, так это купол: {'('NN', 'shoe')': 1, '('JJ', 'new')': 0, '('NN', 'shirt')': 0, '('JJ', 'vintage')': 0}

1 Ответ

0 голосов
/ 06 ноября 2018

Поскольку вы помечаете pandas, вы можете с помощью tolist заново создать свой фрейм данных, а затем с помощью isin с value_counts

ndf=pd.DataFrame(df.term.tolist())
ndf[ndf.isin(permute_lst)].stack().value_counts()
Out[223]: 
(NN, shoe)    2
dtype: int64
# if need dict adding to_dict
ndf[ndf.isin(permute_lst)].stack().value_counts().to_dict()
Out[224]: {('NN', 'shoe'): 2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...