有没有更好的方法可以按指定的列将数据与不带大熊猫的numpy分组?

时间:2019-10-07 22:06:55

标签: python numpy matplotlib

该解决方案中,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的for循环。我担心是否有更好的方法来进行分组,例如一些numpy方法?

我知道使用熊猫来做到这一点比较容易,但是由于某些原因,我必须在没有熊猫的情况下这样做。

1 个答案:

答案 0 :(得分:0)

您可以使用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允许您获取Regionname匹配的索引。请注意,processed_data['Price']的列表推导使用 Regionname列(其中具有重复项)作为'where handle',而 Regionname列,其中没有重复项用于迭代。这是因为我们要使用原始索引来抓取data['Price']

享受!

相关问题