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

Решение в том, что post предполагает данные, упорядоченные по ключу, что отличается от моего случая.

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

Набор данных './melb_data.csv' взят из kaggle .

enter image description here

Этот код предназначен для рисования горизонтальной графической карты.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from collections import defaultdict

data = np.genfromtxt('melb_data.csv', 
                     delimiter=',', names = True, 
                     dtype=None, encoding=None)

tem1 = defaultdict(list)
for key, value in zip(data['Regionname'], data['Price']):
    tem1[key].append(value)

data = defaultdict(list)
for key, value in tem1.items():
    data["Regionname"].append(key)
    data["Price"].append(value)

fig, ax = plt.subplots()
ax.boxplot(data['Price'], labels=data['Regionname'],vert=False)
plt.show()

Есть 2 для цикловв коде для группы price по Regionname. Я обеспокоен, если есть лучший способ сделать групповой, например, какие-нибудь обалденные методы?

Я знаю, что для этого проще использовать панд, но по какой-то причине я должен сделать это без панд. .

1 Ответ

0 голосов
/ 08 октября 2019

Вы можете делать то, что ищете, используя конструктор set() и numpy.where:

import numpy as np
import matplotlib.pyplot as plt

data = np.genfromtxt('melb_data.csv', 
                     delimiter=',', names=True, 
                     dtype=None, encoding=None)

processed_data          = {'Regionname': set(data['Regionname'])}
processed_data['Price'] = [data['Price'][np.where(data['Regionname'] == rn)]
                              for rn in processed_data['Regionname']]

fig, ax = plt.subplots()
ax.boxplot(processed_data['Price'], labels=processed_data['Regionname'],vert=False)
plt.show()

Конструктор set() возвращает набор уникальных значений Regionname. numpy.where позволяет получить индексы, где совпадает имя региона. Обратите внимание, что для понимания списка processed_data['Price'] используется столбец Regionname с дубликатами для 'where grab' и столбец Regionname без дубликатов для итерации . Это потому, что мы хотим получить data['Price'], используя оригинальные индексы.

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...