我想在字典中找到一个项目的平均价格,该项目包含商品对,商店为关键,价格为价值
示例字典
{('item1', 'shop1'): 40,
('item2', 'shop2'): 14,
('item1', 'shop3'): 55,
例如我想找到item1的平均价格。是否可以使用多键词典或我应该更改它?有什么想法吗?
由于
答案 0 :(得分:1)
有可能。不确定这是否是您问题的正确数据结构,但您可以这样做。
首先,您选择包含所需项目的所有键,此处我选择'item1'
:
interesting_keys = filter(lambda k: k[0] == 'item1', a.keys())
现在你可以将所有这些元素相加并除以元素的数量。
result = sum([a[k] for k in interesting_keys])/len(interesting_keys)
如果你想创建一个新词典,每个词减少到一个元素后跟平均值,你可以做一些看起来像这样的事情:
def group_prices(prices):
grouped_prices = {}
number_items = {}
for k, v in prices.iteritems():
grouped_prices[k[0]] = grouped_prices.get(k[0], 0) + v
number_items[k[0]] = number_items.get(k[0], 0) + 1
return {k:v/number_items[k] for (k,v) in grouped_prices.iteritems()}
答案 1 :(得分:1)
您可以使用nested lists
创建Pandas DataFrame。然后,您可以使用Pandas groupby
获取您正在寻找的mean
。
import pandas as pd
df = pd.DataFrame([['item1', 'shop1', 40],
['item2', 'shop2', 14],
['item1', 'shop3', 55]], columns=('item', 'shop', 'price'))
df
item shop price
0 item1 shop1 40
1 item2 shop2 14
2 item1 shop3 55
result_mean = df.groupby('item')['price'].mean()
result_mean
item
item1 47.5
item2 14.0
Name: price, dtype: float64
答案 2 :(得分:1)
因为这被标记为pandas ...如果你把它变成熊猫系列你可以分组到第0级:
In [11]: d = {('item1', 'shop1'): 40, ('item2', 'shop2'): 14,('item1', 'shop3'): 55}
In [12]: s = pd.Series(d)
In [13]: s
Out[13]:
item1 shop1 40
shop3 55
item2 shop2 14
dtype: int64
In [14]: s.groupby(level=0).mean()
Out[14]:
item1 47.5
item2 14.0
dtype: float64
答案 3 :(得分:0)
我会用pandas DataFrame来解决这个问题:
# create a test dict like the question
my_dict = dict(zip([
('item'+str(i), 'shop'+str(k)) for i in range(5) for k in range(3)],
[random.randint(1,10) for j in range(15)
]))
# create a DataFrame wih MultiIndex
ndx=pd.MultiIndex.from_tuples(list(my_dict.keys()), names=['item','shop'])
df = pd.DataFrame(list(my_dict.values()), index=ndx, columns=['price'])
print('\n', df)
# reset index and use groupby to get means
df.reset_index(inplace=True)
item_mean = df.groupby('item').mean()
print('\n',item_mean)
price
item shop
item3 shop0 5
shop2 3
item1 shop0 4
item3 shop1 7
item4 shop0 7
item0 shop0 10
item2 shop1 3
shop0 2
item1 shop1 10
item4 shop2 5
shop1 3
item1 shop2 2
item0 shop1 1
shop2 8
item2 shop2 7
price
item
item0 6.333333
item1 5.333333
item2 4.000000
item3 5.000000
item4 5.000000