在Python中重新格式化数据(排列)

2024-10-04 09:25:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在建立一个数据分析工具,我需要存储在数据库中的比赛赔率。这样的赔率类型之一被称为“三连胜”或“三连胜”,在这里你必须选择赢得三个参与者在正确的顺序。由于每个比赛最多可以有16名选手(但通常是10名左右),这意味着我有16x15x14个不同的可能排列。为了存储这些,我用“race\u id”、“pos1”、“pos2”、“pos3”和“value”列创建了一个表,其中我只存储现有的赔率。Pos1是赢家,pos2是第二名,pos3是第三名,value是这个特定排列的赔率值。
这一切工作得相当好,我通常有大约500个排列每种族存储在数据库中。你知道吗

你还活着?现在是给我带来麻烦的部分。有时我需要从数据库中提取一些数据,它必须是某种形式(CSV)。这不是我的事。
新的格式是“raceid”,“perm\u 1\u 2\u 3”,“perm\u 1\u 2\u 4”。。。,“permïu 1ïu 2ïu 16”,“permïu 1ïu 3ïu 2”,“permïu 1ïu 3ïu 4”…
所有列都必须以这种新形式存在,即使我没有将它们存储在db中。你知道吗

我不知道该怎么做。任何提示和提示都将不胜感激。你知道吗

下面是一个以db为单位的小数据示例:

raceid    pos1    pos2    pos3    value
201411    1       2       6       4643.6
201411    1       2       7       2321.8
201411    1       2       9       2321.8
201411    1       3       2       9287.2
201411    1       3       4       4643.6

编辑:
我需要这个:

raceid    perm_1_2_3    perm_1_2_4    perm_1_2_5    perm_1_2_6    perm_1_2_7    perm_1_2_8    perm_1_2_9    perm_1_2_10    ...
201411    None          None          None          4643.6        2321.8        None          2321.8        None

这是一个真正的问题,我不希望有人为我做这件事。我只是希望得到一些提示或提示我应该如何解决这个问题。你知道吗


Tags: 工具数据none数据库类型dbvalue参与者
2条回答

您可以使用以下内容来生成这些列名:

import itertools
for x in itertools.permutations([1,2,3]):
    print x

这项工作在Python2.6及更高版本中进行。 对于旧版本,您可以查看以下帖子: How to generate all permutations of a list in Python

好的,您有一些您没有解释过的形式的输入数据,您想要生成从perm_1_2_3perm_16_15_14的列。你知道吗

一种非常简单的方法是使用^{}函数来生成所有的排列;然后只需设置字符串格式:

headers = ['raceid']
values = [raceid]
for perm in itertools.permutations(list(range(1, horses+1)), 3):
    headers.append('perm_{}_{}_{}'.format(*perm))
    values.append(odds.get(perm, None))

我假设odds是一个以马的数字元组为键的字典,可能存储在一个由raceid键控的更大的dict中,你可以得到如下结果:

for raceid, pos1, pos2, pos3, value in csv.reader(f):
    oddses[raceid][int(pos1), int(pos2), int(pos3)] = value

相关问题 更多 >