Я довольно новичок в Python.Я наткнулся на Панд: Группировать по комбинации двух столбцов на SO.К сожалению, принятый ответ больше не работает с версией pandas 0.23.4
Цель этого поста - определить комбинацию групповых переменных и создать словарь для значений.то есть group_by
должен игнорировать порядок группировки.
Вот принятый ответ:
import pandas as pd
from collections import Counter
d = pd.DataFrame([('a','b',1), ('a','c', 2), ('b','a',3), ('b','a',3)],
columns=['x', 'y', 'score'])
d[['x', 'y']] = d[['x', 'y']].apply(sorted, axis=1)
x = d.groupby(['x', 'y']).agg(Counter)
print(x)
Здесь ...apply(sorted)
выдает следующее исключение:
повысить ValueError («Должны иметь равные ключи и значение len» ValueError: Должны иметь равные ключи и значение len при установке с итеративным
Вот моя версия для панд:
> pd.__version__
Out: '0.23.4'
Вотто, что я пробовал после прочтения https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html:
d = pd.DataFrame([('a','b',1), ('a','c', 2), ('b','a',3), ('b','a',3)],
columns=['x', 'y', 'score'])
d=d.sort_values(by=['x','y'],axis=1).reset_index(drop=True)
x = d.groupby(['x', 'y']).agg(Counter)
print(x)
К сожалению, это также выдает ошибку:
1382, в _get_label_or_level_values поднять KeyError (ключ) KeyError: 'x'
Ожидаемый результат:
score count
x y
a b {1: 1, 3: 2} 2
c {2: 1} 1
Кто-нибудь может мне помочь? На заметку, было бы здорово, если бы вы также могли подсказать, как вычислить счетkeys()
в столбце score
. Я ищу векторизованное решение.
Я использую python 3.6.7
Большое спасибо.