Python: создание DataFrame с наибольшей частотой появления на элемент - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть фрейм данных, как указано ниже

data = {
    'Code': ['P', 'J', 'M', 'Y', 'P', 'Z', 'P', 'P', 'J', 'P', 'J', 'M', 'P', 'Z', 'Y', 'M', 'Z', 'J', 'J'],
    'Value': [10, 10, 20, 30, 10, 40, 50, 10, 10, 20, 10, 50, 60, 40, 30, 20, 40, 20, 10]
}

example = pd.DataFrame(data)

Используя Python 3, я хочу создать еще один фрейм данных из фрейма данных example, чтобы Код ассоциировался с большее число Получено значение .

Новый фрейм данных должен выглядеть как решение ниже

output = {'Code': ['J', 'M', 'Y', 'Z', 'P', 'M'],'Value': [10, 20, 30, 40, 50, 50]}

solution = pd.DataFrame(output)

Как видно, у J больше связь со значением 10, чем с другим кодом, поэтому выбран J и т. д.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Если я правильно понял, вам нужно что-то вроде этого:

grouped = example.groupby(['Code', 'Value']).indices
arr_tmp = []
[arr_tmp.append([i[0], i[1], len(grouped[i])]) for i in grouped]#['Int64Index'])
output = pd.DataFrame(data=arr_tmp, columns=['Code', 'Value', 'index_count'])
output = output.sort_values(by=['index_count'], ascending=False)
output.reset_index(inplace=True)
output
0 голосов
/ 24 февраля 2020

Вы можете определить функцию, которая возвращает наиболее встречающиеся элементы и применять ее к сгруппированным элементам. Наконец взорваться, чтобы перечислить в строки.

>>> def most_occurring(grp):
...     res = Counter(grp)
...     highest = max(res.values())
...     return  [k for k, v in res.items() if v == highest]
... 
>>> example.groupby('Value')['Code'].apply(lambda x: most_occurring(x)).explode().reset_index()
   Value Code
0     10    J
1     20    M
2     30    Y
3     40    Z
4     50    P
5     50    M
6     60    P
...