该解决方案中,post 假定是按键对数据进行排序的,这与我的情况不同。
如果在应用该解决方案之前先对数据进行排序,那么冷凝或效率将比我已经实现的要高。
数据集'./melb_data.csv'来自kaggle。
此代码用于绘制水平绘图箱。
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方法?
我知道使用熊猫来做到这一点比较容易,但是由于某些原因,我必须在没有熊猫的情况下这样做。
答案 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']
。
享受!