首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:二进制向量

Python:二进制向量
EN

Stack Overflow用户
提问于 2018-12-11 03:41:44
回答 2查看 186关注 0票数 0

我有一组索引:

代码语言:javascript
复制
indices = (['1', '1.2', '2', '2.2', '3', '4'])

和一个数据集,其中第一个元素标识一个人,第二个元素标识一个回合,第三个元素是索引集中的索引:

代码语言:javascript
复制
dataset = [['A', '1', '1'], ['A', '1', '1.2'], ['B', '1', '2'], ['C', '2', '3']]

我想形成一个二进制向量,其中对于每个人和每个单独的回合,索引要么标记为存在(带有1),要么不存在(带有0)。

期望的输出应该是这样的,其中对于A,向量表示索引1和1.2的存在,对于B,表示索引2,对于C,表示索引3。请注意,对于A,只有一条记录,但存在两个索引。

代码语言:javascript
复制
['A', '1', '1, 1, 0, 0, 0, 0']
['B', '1', '0, 0, 1, 0, 0, 0']
['C', '2', '0, 0, 0, 0, 1, 0']

在处理数据集上的索引循环时,我遇到了一点麻烦。我的想法是循环遍历索引集合,时间与数据集中列表的数量相同。但我不认为这是最有效的方法,任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-11 04:05:07

我会这样做:

代码语言:javascript
复制
from itertools import groupby

for k, g in groupby(dataset, lambda x: x[:2]):
    vals = [x[2] for x in g]
    print(k + [", ".join("1" if x in vals else "0" for x in indices)])

输出

代码语言:javascript
复制
['A', '1', '1, 1, 0, 0, 0, 0']
['B', '1', '0, 0, 1, 0, 0, 0']
['C', '2', '0, 0, 0, 0, 1, 0']

这是你要找的东西吗?

票数 0
EN

Stack Overflow用户

发布于 2018-12-11 04:21:51

这里有一个没有循环的解决方案

代码语言:javascript
复制
import pandas as pd
indlist=['1', '1.2', '2', '2.2', '3', '4']
dataset = [['A', '1', '1'], ['A', '1', '1.2'], ['B', '1', '2'], ['C', '2', '3']]
df=pd.DataFrame(dataset,columns=['player','round','ind']).set_index('ind').reindex(indlist)
ans=df.reset_index().pivot('player','ind','round').fillna(0)[1:]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53712520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档