Создайте Dict of Count на основе двух столбцов Dataframe - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть фрейм данных, который выглядит следующим образом:

    start   stop
0   1       2
1   3       4
2   2       1
3   4       3

Я пытаюсь создать словарь с парами ключ = (начало, остановка) из моего списка кортежей и значением = счетчиком ихпоявление, независимо от порядка.Другими словами, (1,2) и (2,1) оба будут считаться вхождением пары (1,2) в список кортежей.

Желаемый результат: dict_count= {('1','2'):2, ('3','4'):2}

Вот моя попытка:

my_list=[('1','2'),('3','4')]

for pair in my_list:
    count=0
    if ((df[df['start']]==pair[0] and df[df['end']]==pair[1]) or (df[df['start']]==pair[1]) and df[df['end']]==pair[0])::
        count+=1
    dict_count[pair]=count

Однако, это дает мне KeyError: KeyError: "['1' ...] not in index"

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Использовать collections.Counter:

>>> from collections import Counter
>>> Counter(map(tuple, np.sort(df[['start','stop']], axis=1)))
{(1, 2): 2, (3, 4): 2}

Это не меняет ваш оригинальный DataFrame.

0 голосов
/ 04 декабря 2018

Используя values + sort, тогда мы делаем groupby

df.values.sort()
df
  start stop
0   '1'  '2'
1   '3'  '4'
2   '1'  '2'
3   '3'  '4'
df.groupby(df.columns.tolist()).size()
start  stop
'1'    '2'     2
'3'    '4'     2
dtype: int64

Если вам нужно dict

df.groupby(df.columns.tolist()).size().to_dict()
{("'1'", "'2'"): 2, ("'3'", "'4'"): 2}

Обновление

df['orther']=1
df[['start','stop']]=np.sort(df[['start','stop']].values)
df.groupby(['start','stop']).size().to_dict()
{("'1'", "'2'"): 2, ("'3'", "'4'"): 2}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...