Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的组合键分组_Python_Aggregation - Fatal编程技术网

Python中的组合键分组

Python中的组合键分组,python,aggregation,Python,Aggregation,我有这样一个CSV文件: route|id|alias|longitude|latitude A|1|first|-33.51808226|-70.58256582 A|1|first|-33.52850414|-70.57645648 B|2|second|-33.51952529|-70.58043875 B|2|second|-33.53452223|-70.58343824 每个路由都有一个id和一个别名,对于相同的路由,它们总是相同的。此外,每条路线都有一组点,每个点由经度和纬度组成

我有这样一个CSV文件:

route|id|alias|longitude|latitude
A|1|first|-33.51808226|-70.58256582
A|1|first|-33.52850414|-70.57645648
B|2|second|-33.51952529|-70.58043875
B|2|second|-33.53452223|-70.58343824
每个路由都有一个
id
和一个
别名
,对于相同的
路由
,它们总是相同的。此外,每条
路线
都有一组
,每个点由
经度
纬度
组成。我正在尝试按
路线
点进行分组,但我希望生成文件的每个字段

当我使用
itertools groupby
route
分组时,我只能生成
route

with open(self.datafile, "r") as f:
        reader = csv.DictReader(f, delimiter='|')
        # Group data using 'route' as key
        for route, points in groupby(reader, lambda p: p['route']):
            points = list(points)
            points = [
                {
                    'longitude': p['longitude'],
                    'latitude': p['latitude']
                } for p in points
            ]
            yield {
                "_source": {
                    "route": route,
                    "points": points
                }
            }
我尝试了不同的方法来获取该
路线的
id
alias
(比如使用
route['id']
p['id']
来获取
id
,或者在现有路线之外使用另一种方法),但都不起作用

在使用groupby时,有没有一种方法可以使用复合键?或者更容易解决我的问题

我希望能够得出以下结论:

yield {
                "_source": {
                    "route": route,
                    "id": id,
                    "alias": alias,
                    "points": points
                }
            }

如果从
函数返回元组,则可以同时
groupby
多个字段

你可以用它。for循环如下所示:

for (route, id, alias), points in groupby(reader, key=operator.itemgetter('route', 'id', 'alias')):

如果从
函数返回元组,则可以同时
groupby
多个字段

你可以用它。for循环如下所示:

for (route, id, alias), points in groupby(reader, key=operator.itemgetter('route', 'id', 'alias')):

您确实可以使用复合键
groupby

# Group data using 'route', 'id', 'alias' as key
for route_id_alias, values in itertools.groupby(reader, lambda p: (p['route'], p['id'], p['alias'])):
    points = [
        {
            'longitude': p['longitude'],
            'latitude': p['latitude'],
        } for p in values
    ]
    print( {
        "_source": {
            "route": route_id_alias[0],
            "id": route_id_alias[1],
            "alias": route_id_alias[2],
            "points": points,
        }
    })
在生成结果时,只需按索引访问密钥


您确实可以使用复合键
groupby

# Group data using 'route', 'id', 'alias' as key
for route_id_alias, values in itertools.groupby(reader, lambda p: (p['route'], p['id'], p['alias'])):
    points = [
        {
            'longitude': p['longitude'],
            'latitude': p['latitude'],
        } for p in values
    ]
    print( {
        "_source": {
            "route": route_id_alias[0],
            "id": route_id_alias[1],
            "alias": route_id_alias[2],
            "points": points,
        }
    })
在生成结果时,只需按索引访问密钥


您的预期输出是什么样的?你可以用熊猫吗。“不工作”是什么意思?2.您可以从
lambda 3返回元组
itertools.groupby
用于排序数据时效果最好(根据分组使用的相同
键)
对于路由,groupby中的点(读卡器,lambda p:p['route']):;点对点:;打印(点['id'],点['alias'])
工作正常如果出现错误,请提供。同时提供预期输出我试图澄清预期输出您的预期输出是什么样子的?你可以用熊猫吗。“不工作”是什么意思?2.您可以从
lambda 3返回元组
itertools.groupby
用于排序数据时效果最好(根据分组使用的相同
键)
对于路由,groupby中的点(读卡器,lambda p:p['route']):;点对点:;打印(点['id'],点['alias'])
工作正常如果出现错误,请提供。同时提供一个预期的输出我试图澄清预期的输出我需要了解这里发生了什么。我发布了一个和这个概念相同的答案(从键函数返回一个元组),结果被否决;然后你把这个贴出来,得到所有的荣誉。“为什么?”马蒂亚塞丁格首先:我没有抄你的答案。你发表你的作品时,我正在写我的。我们的答案在概念上确实是等价的,但你的答案更。。。概念的我认为itemgetter的使用为OP带来了不必要的复杂性。我试图给出一个非常简单且立即有用的答案(使用TYO链接)。我不明白的是为什么你的答案被否决了。顺便说一句:我只是对你的答案投了更高的票。这个评论并没有任何指责的意思,如果感觉是这样的话,我很抱歉。这更像是你说的“我不明白为什么[我的]答案被否决了”,当它归结为与你相同的事情时,但可能整个环体和TIO链接的勺子喂食真的是致命的事情…无论如何,留下评论帮助我完善了我答案的文本。谢谢你的投票。我有点需要了解这里发生了什么。我发布了一个和这个概念相同的答案(从键函数返回一个元组),结果被否决;然后你把这个贴出来,得到所有的荣誉。“为什么?”马蒂亚塞丁格首先:我没有抄你的答案。你发表你的作品时,我正在写我的。我们的答案在概念上确实是等价的,但你的答案更。。。概念的我认为itemgetter的使用为OP带来了不必要的复杂性。我试图给出一个非常简单且立即有用的答案(使用TYO链接)。我不明白的是为什么你的答案被否决了。顺便说一句:我只是对你的答案投了更高的票。这个评论并没有任何指责的意思,如果感觉是这样的话,我很抱歉。这更像是你说的“我不明白为什么[我的]答案被否决了”,当它归结为与你相同的事情时,但可能整个环体和TIO链接的勺子喂食真的是致命的事情…无论如何,留下评论帮助我完善了我答案的文本。谢谢你的投票。