如果我不做广泛的研究试图找到答案,我就不会发表这篇文章。唉,我一直找不到这样的答案。我有一个成对的数据集,看起来像这样:
PERSON, ATTRIBUTE
person1, a
person1, b
person1, c
person1, d
person2, c
person2, d
person2, x
person3, a
person3, b
person3, e
person3, f
我想做的是:1)删除出现次数不超过10次的属性,2)将其转换为如下所示的二进制表:
a b c
person1 1 1 1
person2 0 0 1
person3 1 1 0
到目前为止,我已经编写了一个脚本来删除只出现10次的属性;但是,它的速度非常慢,因为它必须遍历每个属性,确定其频率,并找到相应的x和y值以附加到新变量。你知道吗
import pandas as pd
import numpy as np
import csv
from collections import Counter
import time
df = pd.read_csv(
filepath_or_buffer='sample.csv',
sep=',')
x = df.ix[:, 1].values
y = df.ix[:, 0].values
x_vals = []
y_vals = []
counter = Counter(x)
start_time = time.time()
for each in counter:
if counter[each]>=10:
for i, j in enumerate(x):
if j==each:
print "Adding position:" + str(i)
x_vals.append(each)
y_vals.append(y[i])
print "Time took: %s" %(time.time()-start_time)
我希望得到以下方面的帮助:1)找到一种更快的方法来匹配出现10次以上的属性,并将值附加到新变量中。你知道吗
或者
2)完全获得最终二进制表的替代方法。我觉得将成对表转换为二进制表可能是数据世界中的常见现象,但我找不到任何代码、模块等可以帮助我这样做。你知道吗
万分感谢!你知道吗
我可能会添加一个虚拟列,然后调用
pivot_table
:然后我们只能选择出现次数超过10次的属性(这里是我的示例中的5个):
相关问题 更多 >
编程相关推荐