簡體   English   中英

在 Pandas 中為每行創建一個唯一值?

[英]Creating a unique value per row in pandas?

獲取原始數據 --> 對其進行轉換並將其與其他文件合並 --> 通過電子郵件發送給最終用戶以供審查

最好的方法是什么?

如果'employee_id'+'customer_id'+'timestamp'很長,並且您對不太可能發生沖突的內容感興趣,則可以將其替換為哈希。 散列的范圍和質量將決定沖突的概率。 也許最簡單的方法是使用內置的hash 假設你的 DataFrame 是df ,列是字符串,這是

(df.employee_id + df.customer_id + df.timestamp).apply(hash)

如果您想更好地控制大小和碰撞概率,請參閱有關 Python 中非密碼散列函數的這篇文章


編輯

基於對這個問題的回答,您可以像這樣構建 10 個字符的哈希:

import hashlib
df['survey_id'] = (df.employee_id + df.customer_id + df.timestamp).apply(
    lambda s: hashlib.md5(s).digest().encode('base64')[: 10])

如果有人正在尋找模塊化功能,請將其保存到文件中以在需要時使用。 (對於 Pandas 數據幀)

df是您的數據框, columns是要散列的列列表, name是具有散列值的新列的名稱。

返回原始數據幀的副本,其中包含一個包含每行哈希的新列。

def hash_cols(df, columns, name="hash"):
    new_df = df.copy()
    def func(row, cols):
        col_data = []
        for col in cols:
            col_data.append(str(row.at[col]))

        col_combined = ''.join(col_data).encode()
        hashed_col = sha256(col_combined).hexdigest()
        return hashed_col

    new_df[name] = new_df.apply(lambda row: func(row,columns), axis=1)

    return new_df

我有一個類似的問題,我這樣解決了:

import hashlib
import pandas as pd
df = pd.DataFrame.from_dict({'mine': ['yours', 'amazing', 'pajamas'], 'have': ['something', 'nothing', 'between'], 'num': [1, 2, 3]})
hashes = []
for index, row in df.iterrows():
    hashes.append(hashlib.md5(str(row).encode('utf-8')).hexdigest())
# if you want the hashes in the df, 
# in my case, I needed them to form a JSON entry per row
df['hash'] = hashes

結果將形成一個 md5 散列,但您實際上可以使用任何您需要的散列函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM