如何计算在数据帧大熊猫的所有列的哈希?

问题描述 投票:0回答:2

df.apply是可以在一个数据帧,或所需的列施加一定的函数到所有的列的方法。然而,我的目的是计算一个字符串的哈希值:这个字符串是对应于所有列的行的所有值的串联。我当前的代码将返回NaN

目前的代码是:

df["row_hash"] = df["row_hash"].apply(self.hash_string)

功能self.hash_string是:

def hash_string(self, value):
        return (sha1(str(value).encode('utf-8')).hexdigest())

是的,它会更容易合并的大熊猫数据帧中的所有列,但current answer也帮不了我。

我正在读的文件(第10行):

16012,16013,16014,16015,16016,16017,16018,16019,16020,16021,16022
16013,16014,16015,16016,16017,16018,16019,16020,16021,16022,16023
16014,16015,16016,16017,16018,16019,16020,16021,16022,16023,16024
16015,16016,16017,16018,16019,16020,16021,16022,16023,16024,16025
16016,16017,16018,16019,16020,16021,16022,16023,16024,16025,16026

山坳里的名字是:col_test_1, col_test_2, .... , col_test_11

python python-3.x pandas
2个回答
1
投票

您可以创建一个新列,这是所有其他的串联:

df['new'] = df.astype(str).values.sum(axis=1)

然后应用在它的散列函数

df["row_hash"] = df["new"].apply(self.hash_string)

这还是一个行应该工作:

df["row_hash"] = df.astype(str).values.sum(axis=1).apply(hash_string)

但是,不知道你在这里需要一个单独的函数,所以:

 df["row_hash"] = df.astype(str).values.sum(axis=1).apply(lambda x: sha1(str(x).encode('utf-8')).hexdigest())

1
投票

您可以使用apply两次,第一次就行元素,然后对结果:

df.apply(lambda x: ''.join(x.astype(str)),axis=1).apply(self.hash_string)

旁注:我不明白为什么要定义hash_string作为实例方法(而不是一个简单的功能),因为它不使用self说法。如果您有问题,可以只把它作为功能:

df.apply(lambda x: ''.join(x.astype(str)),axis=1).apply(lambda value: sha1(str(value).encode('utf-8')).hexdigest())
© www.soinside.com 2019 - 2024. All rights reserved.