【问题标题】:Find total number of unique elements in two columns combined查找合并的两列中唯一元素的总数
【发布时间】:2021-04-01 13:42:17
【问题描述】:

我有一个包含 8 亿行和两列的数据框 names_df。名字和姓氏。我需要从合并的两列中找到唯一名称的总数。

           first_name last_name
0          john       doe
1          jane       doe
2          doe        john
3          doe        jane
:
799999999  Levi       Ackerman
800000000  Gojo       Satoru

我可以这样做:

unique_names = np.concatenate((names_df.first_name.unique(), names_df.last_name.unique()), axis=None)
unique_names=set(unique_names.tolist())
print(len(unique_names))

但是,这会花费大量时间并且效率低下,那么从合并的两列中查找唯一值的总数有什么更有效的方法? unique_names 看起来像这样 =

>>>print(unique_names)
>>> {'john','jane','doe','levi','ackerman','Gojo','satoru'}

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    使用这个(这比你的方法快):

    set(names_df['first_name'].unique().tolist()+names_df['last_name'].unique().tolist())
    

    【讨论】:

    • 我相信我的问题并不清楚,我做了一些编辑以显示结果的样子。谢谢
    • 更新了我的答案,请看一下
    【解决方案2】:

    如果你有一台多核机器,那么使用 python 多处理库对数据进行排序并将其分成 26 个批次。从每个批次中获取唯一的,然后您可以合并所有这些唯一的 df。

    【讨论】:

    • 我认为我的问题并不清楚,我进行了一些编辑以显示结果的样子。谢谢
    【解决方案3】:

    创建一个临时的第三列并计算其唯一值的长度应该会降低计算成本。

    names_df['full_name'] = names_df.first_name + names_df.last_name
    total_unique_length = len(names_df.full_name.unique())
    names_df = names_df.drop(columns='full_name')
    print(total_unique_length)
    

    编辑 - 根据您的编辑,您只需要两个列表中的唯一名称。如果有 Jane Doe 和 John Doe,你想要 [John, Jane, Doe]

    在这种情况下要容易得多。

    total_unique_length = len(names_df.first_name.unique()) + len(names_df.last_name.unique())
    print(total_unique_length)
    

    【讨论】:

    • 感谢您的回复。但是 len(names_df.first_name.unique()) + len(names_df.last_name.unique()) 不起作用,因为名字和姓氏都可以有共同的条目。示例:john doe 和 doe john 您的代码将给出 4,因为实际结果是 {john, doe},即 2
    【解决方案4】:

    对已编辑的问题进行编辑 如果您想要来自多个列的所有唯一值,您可以使用:

    names= names_df[["first_name", "last_name"]].values.ravel()
    unique_names =  pd.unique(names)
    n_unique_names = len(n_unique_names)
    

    Please see here


    旧答案:

    您可以使用 pandas 中的drop_duplicates(),然后查看返回的 pandas.DataFrame 的形状。不过,如果 / 速度会快多少。

    【讨论】:

    • 我认为我的问题并不清楚,我进行了一些编辑以显示结果的样子。谢谢
    • 更新了我的答案,请看一下
    猜你喜欢
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多