gpt4 book ai didi

Python - 按多列分组并获取最大值或总和

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:12 24 4
gpt4 key购买 nike

我有兴趣获得产品价格的最大值。

这是输入数据。 Download Sales Data

我想按州、国家分组

如何对这两列进行分组以获得价格的最大值。

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"])

使用 Pandas 的。我可以不使用 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"]

最佳答案

itertools.groupby 仅适用于使用与 groupby 相同的键函数排序的列表,如 documentation 中给出的那样-

itertools.groupby(iterable[, key])

Make an iterator that returns consecutive keys and groups from the iterable. The key is a function computing a key value for each element. If not specified or is None, key defaults to an identity function and returns the element unchanged. Generally, the iterable needs to already be sorted on the same key function.

因此,为了使用 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]

我将键添加到结果中,以识别每个最大值对应于哪个 Country/State。在此之后,您可以遍历 result 并打印每个结果(如果这是您真正想要的)。

关于Python - 按多列分组并获取最大值或总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32239161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com