【问题标题】:Fastest way to remove rows that contain substrings of values in the same column of a pandas dataframe删除包含熊猫数据框同一列中值子字符串的行的最快方法
【发布时间】:2021-02-14 14:00:31
【问题描述】:

我正在尝试编写一些有效的代码来删除 pandas 数据框的行,其中特定列中的值是同一列中其他值(至少一个值的子集)的子字符串。 例如,考虑以下输入数据框中的列B

|   | A  | B          |
|---|----|------------|
| 0 | 22 | ab         |
| 1 | 33 | abc        |
| 2 | 44 | abcd       |
| 3 | 55 | a          |
| 4 | 66 | john       |
| 5 | 77 | john Doe   |
| 6 | 88 | jo         |
| 7 | 99 | john hi Doe|

输出数据框:

|   | A  | B          |
|---|----|------------|
| 2 | 44 | abcd       |
| 5 | 77 | john Doe   |
| 7 | 99 | john hi Doe|

行 0、1 和 3 已被删除,因为它们在列 Bababca)的所有值都是该列中其他值的子字符串(即 abcd )。第 4 行和第 6 行也是如此。

【问题讨论】:

    标签: python pandas dataframe substring


    【解决方案1】:

    您可以使用一些列表综合来检查行字符串是否在数据框的其他行中:

    m = df['B'].apply(lambda x: any([x for y in df['B'] if x != y if x in y]))
    df = df[~m]
    df
    Out[1]: 
        A            B
    2  44         abcd
    5  77     john Doe
    7  99  john hi Doe
    

    【讨论】:

    • 谢谢大卫。您的代码工作正常。如果没有提供更有效的答案,我会标记你的答案。我想知道是否有更快的方法来获得相同的结果?
    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 2020-11-29
    • 2022-11-27
    • 2022-12-03
    相关资源
    最近更新 更多