我有兴趣获得产品价格的最大值。
这是输入数据。下载销售数据
我想按州、国家/地区分组
我如何对这两列进行分组以获得价格的最大值。
import csv
import locale
from itertools import groupby
locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )
total_price = 0
max_price = 0
reader = csv.DictReader(open('/Users/myuser/Downloads/SalesData.csv', 'rU'), dialect='excel')
groups = groupby(reader, lambda d: d['State'])
result = [max(g, key=lambda d: d['State']) for k, g in groups]
for row in reader:
print row["State"], row["Country"], locale.atoi(row["Price"])
max_price = max(row.iteritems(), key=operator.itemgetter(1))
total_price += locale.atoi(row["Price"])
Run Code Online (Sandbox Code Playgroud)
与熊猫的使用。我可以在不使用 pandas 的情况下得到这个吗?
import pandas as pd
from pandas import DataFrame
import locale
locale.setlocale( locale.LC_ALL, 'en_US.UTF-8' )
df = pd.read_csv('/Users/myuser/Downloads/SalesData.csv', index_col=False, header=0,thousands=',')
print df.groupby(["Country","State"]).max()["Price"]
Run Code Online (Sandbox Code Playgroud)
itertools.groupby仅适用于使用与 groupby 相同的键函数排序的列表,如文档中给出的-
itertools.groupby(iterable[, key])
创建一个迭代器,从可迭代对象中返回连续的键和组。键是计算每个元素的键值的函数。如果未指定或为 None,则 key 默认为恒等函数并返回未更改的元素。一般来说,可迭代对象需要已经在相同的键函数上进行排序。
因此,为了实现您想要的效果itertools.groupby,您很可能需要首先根据'Country'和 来对数据进行排序'State' ,然后对其进行 groupby 。
另外,服用时不max()应该使用。例子 -'Price''State'
reader = csv.DictReader(open('/Users/myuser/Downloads/SalesData.csv', 'rU'), dialect='excel')
sortedreader = sorted(reader, key=lambda d: (d['Country'], d['State']))
groups = groupby(sortedreader, key=lambda d: (d['Country'], d['State']))
result = [(k, max(g, key=lambda d: d['Price'])) for k, g in groups]
Run Code Online (Sandbox Code Playgroud)
我将键添加到结果中,以识别哪个Country/State每个最大值对应。result之后,如果您真正想要的话,您可以迭代并打印每个内容。
| 归档时间: |
|
| 查看次数: |
7781 次 |
| 最近记录: |