generalize_names_duplcheck: 在不同名称之间进行去重的同时,规范化名称

import pandas as pd

def convert_name_format(df, last_name_col, first_name_col, separator='_'):
    # Create a set to track unique names
    unique_names = set()

    def format_name(row):
        # Extract last name and first name
        last_name = row[last_name_col].strip().lower()
        first_name = row[first_name_col].strip().lower()

        # Create the formatted name
        formatted_name = f"{last_name}{separator}{first_name[0]}"

        # Check for duplicates and modify accordingly
        if formatted_name in unique_names:
            count = 1
            # Create a new unique name
            while formatted_name in unique_names:
                formatted_name = f"{last_name}{separator}{first_name[0]}_{count}"
                count += 1

        # Add the formatted name to the set of unique names
        unique_names.add(formatted_name)
        return formatted_name

    # Apply the format_name function to the DataFrame
    df['formatted_name'] = df.apply(format_name, axis=1)

    return df

# Example usage
data = {
    'Last Name': ['Smith', 'Johnson', 'Smith'],
    'First Name': ['John', 'Jane', 'Johnny']
}

df = pd.DataFrame(data)
result_df = convert_name_format(df, 'Last Name', 'First Name')
print(result_df)
# 通用名称重复检查

此模块提供了一个功能,用于检查名称的通用性和重复性。它特别适用于处理不同来源的数据,确保数据一致性。

## 使用示例

假设我们有一个包含各种名称的数据集,我们希望找出重名的情况并进行标准化处理。

```python
from mlxtend.text import generalize_names_duplcheck

# 示例数据
names = ['Alice', 'alice', 'ALICE', 'Bob', 'bob', 'Charlie']

# 检查重复并进行标准化
unique_names = generalize_names_duplcheck(names)

print(unique_names)  # 输出去重和标准化后的名称


## 概述


**注意**,使用 [`mlxtend.text.generalize_names`](./generalize_names.md) 时,如果 `firstname_output_letters` 设置过少,可能会导致重复条目。例如,如果您的数据集中包含名字 "Adam Johnson" 和 "Andrew Johnson",默认设置(即 1 个名字字母)将会在这两种情况下产生通用名称 "johnson a"。

一种解决方案是通过将参数 `firstname_output_letters` 的值设置为大于 1 的值,来增加输出中的名字字母数量。

另一种解决方案是,如果您使用的是 pandas DataFrame,可以使用 `generalize_names_duplcheck` 函数。

默认情况下,`generalize_names_duplcheck` 将对 pandas DataFrame 列应用 `generalize_names`,使用最少数量的名字字母,并根据需要附加尽可能多的名字字母,直到给定 DataFrame 列中没有重复项为止。包含名字的示例数据集列


### 参考文献

- -


## 示例 1 - 默认设置


读取一个包含“名称”列的CSV文件,我们想要对名称进行概括化:

- 塞缪尔·埃托'o
- 亚当·约翰逊
- 安德鲁·约翰逊



```python
import pandas as pd
from io import StringIO

simulated_csv = "name,some_value\n"\
                "Samuel Eto'o,1\n"\
                "Adam Johnson,1\n"\
                "Andrew Johnson,1\n"

df = pd.read_csv(StringIO(simulated_csv))
df

name some_value
0 Samuel Eto'o 1
1 Adam Johnson 1
2 Andrew Johnson 1

应用 generalize_names_duplcheck 生成一个新的 DataFrame,包含没有重复项的通用名称:

from mlxtend.text import generalize_names_duplcheck
df_new = generalize_names_duplcheck(df=df, col_name='name')
df_new

name some_value
0 etoo s 1
1 johnson ad 1
2 johnson an 1

API

generalize_names_duplcheck(df, col_name)

Generalizes names and removes duplicates.

Applies mlxtend.text.generalize_names to a DataFrame with 1 first name letter by default and uses more first name letters if duplicates are detected.

Parameters

Returns

Examples

For usage examples, please see https://rasbt.github.io/mlxtend/user_guide/text/generalize_names_duplcheck/