使用主键的二进制数据类型是否存在性能(或其他)问题.该数据库具有大量使用这些密钥定期连接的大型表.索引是聚集的.我相信这些不能自动递增(作为Identity字段).
在第一种情况下,我使用一个非常简单的方法DataFrame来尝试使用pandas.cut()来计算另一列范围内一列中的唯一值的数量.代码按预期运行:
但是,在以下代码中,pandas.cut()计算错误的唯一值的数量.我希望第一个bin(1462320000,1462406400)有5个唯一值,其他bin包括最后一个bin(1462752000,1462838400)有0个唯一值.
相反,如结果所示,代码在最后一个bin(1462752000,1462838400)中返回5个唯一值,而不应计算2个突出显示的值,因为它们超出范围.
所以有人可以解释为什么pandas.cut()在这两种情况下表现如此不同?而且,如果您还能告诉我如何更正代码以正确计算另一列的值范围内的一列中的唯一值的数量,我将非常感激.
附加信息:(请导入pandas并numpy运行代码,我的pandas版本是0.19.2,我使用的是python 2.7)
为了您的参考,我特此发布我DataFrame和您的代码以重现我的代码:
情况1:
df = pd.DataFrame({'No': [1,1.5,2,1,3,5,10], 'useragent': ['a', 'c', 'b', 'c', 'b','a','z']})
print type(df)
print df
df.groupby(pd.cut(df['No'], bins=np.arange(0,4,1))).useragent.nunique()
Run Code Online (Sandbox Code Playgroud)
案例2:
print type(df)
print len(df)
print df.time.nunique()
print df.hash.nunique()
print df[['time','hash']]
df.groupby(pd.cut(df['time'], bins =np.arange(1462320000,1462924800,86400))).hash.nunique()
Run Code Online (Sandbox Code Playgroud)
案例2的数据:
time      hash
1462328401 qo
1462328401 qQ
1462838401 q1
1462328401 q1
1462328401 qU
1462328401 qU
1462328401 qU
1462328401 qU
1462328401 qX
1462838401 qX
Run Code Online (Sandbox Code Playgroud) 您可能知道在Ruby中,两个相同的字符串没有相同的object_id,而两个相同的符号则相同.例如:
irb(main):001:0> :george.object_id == :george.object_id
=> true
irb(main):002:0> "george".object_id == "george".object_id
=> false
Run Code Online (Sandbox Code Playgroud)
但是,在我下面的代码中,它显示了具有相同值"one"的两个字符串具有相同的object_id.
class MyArray < Array
    def ==(x)
        comparison = Array.new()
        x.each_with_index{|item, i| comparison.push(item.object_id.equal?(self[i].object_id))}
        if comparison.include?(false) then
            false
        else
            true
        end
    end
end
class MyHash < Hash
    def ==(x)
         y = Hash[self.sort]
        puts y.class
        puts y
        x = Hash[x.sort]
        puts x.class
        puts x
puts "______"
        xkeys = MyArray.new(x.keys)
        puts xkeys.class
        puts xkeys.to_s
        puts xkeys.object_id
        puts xkeys[0].class
        puts xkeys[0]
        puts xkeys[0].object_id
puts "______"
        xvals = MyArray.new(x.values)
puts "______"
        selfkeys …Run Code Online (Sandbox Code Playgroud)