gpt4 book ai didi

python - 构建一个可以根据其他 pd.DataFrame 功能导出新的哈希列的函数

转载 作者:行者123 更新时间:2023-12-04 14:54:17 25 4
gpt4 key购买 nike

我有一个健康保险信息的 pandas DataFrame - 姓名、地址、出生日期等。

我写了一个在单行上工作的函数:

    
def make_hash(partner: str, df: pd.DataFrame) -> str:
"""
For Partner A, df (pd.DataFrame) must contain:
health_plan_id: str
date_of_birth: dt.Timestamp
first_name: str
Other partners will have different feature names for hash input and require a new elif block, below.
"""
if partner == 'Partner A':
health_plan_id = str(df.loc[:,'ID'].item()).strip().encode()
date_of_birth = str(dt.date(df.loc[:,'Date of Birth'].item())).encode()
first_name = str(df.loc[:,'Member Name'].item()).split(",")[1].strip().encode()

hash_input = health_plan_id + date_of_birth + first_name
h = hashlib.sha256(string=hash_input).hexdigest()
print(f"Input: {hash_input}. Result: {h}.\n")
return h
else:
print("No hashing strategy defined for that partner.")

哪些输出(针对 PII 更改的值):

make_hash(partner="Partner A", df=df)

Input: b'B88845204081984-06-11MickeyMouse'. Result: 4d578e1acd7c670193448b84362095383cc13a24249f6c8c92816d79ec3c48d8.
Out[60]: '4d578e1acd7c670193448b84362095383cc13a24249f6c8c92816d79ec3c48d8'

但理想情况下,它会派生一个新列 (ID) 并添加“4d578e1acd...”值。如果我尝试在具有 > 1 行的 DataFrame 上使用此函数,则会出现错误:

ValueError: can only convert an array of size 1 to a Python scalar

我希望在 lambda 中使用该函数,该函数可以在具有任意行数的 pd.DataFrame 上运行,并期望输出是另一个 pd.DataFrame 具有相同的行数,但特征 + 1(对于新的 ID 列)。

这可能吗?我看到几个类似的问题,但我不确定我是否可以(或想要?)在整个 pd.Series 上执行此操作,因为上面的函数将有一些数据清理步骤取决于合作伙伴...

最佳答案

为了使用 lambda 函数,您必须做一点小改动。

function make_partnerhash(datarow, partner : str):

h = 'a_default_value_like_Partner_has_no_hashing_strategy'

if partner == "Partner A":
id = datarow['ID']
... calculate hash etc ...
return h

然后您可以像这样从 Lambda 调用该函数:

df['HASH_COLUMN_NAME'] = df.apply(lambda x: make_parnerhash(x, 'Partner A'), axis=1)

因为你是 encode() 和 strip() 大多数列,你可以将你需要的每个字段打包到一个列表中, encode() 和 strip() 列表理解中的字段,并使用 str .join() 方法连接所有值,如下所示:

def make_partnerhash(row, partner: str):
h = 'NO_HASH_DEFINED_FOR_THIS_PARTNER'
if partner == 'Partner A':
values_to_hash = [row['ID'],
pd.to_datetime(row['Date of Birth']),
row['Member Name'].split(",")[1]]

hash_input = "".join( [ str(x).strip() for x in values_to_hash]).encode()
h = hashlib.sha256(hash_input).hexdigest()

return h

关于python - 构建一个可以根据其他 pd.DataFrame 功能导出新的哈希列的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68423620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com