gpt4 book ai didi

python - Pandas :根据列表中的重复值删除行

转载 作者:太空狗 更新时间:2023-10-29 22:12:43 25 4
gpt4 key购买 nike

我想根据一段字符串是否在该字符串中重复来删除我的数据框中的行。例如,如果字符串是 jkl-ghi-jkl,我会删除这一行,因为 jkl 重复了两次。我认为创建一个列表并检查列表中的重复项将是理想的方法。

此示例的数据框由 1 列和两个数据点组成:

    df1 = pd.DataFrame({'Col1' : ['abc-def-ghi-jkl', 'jkl-ghi-jkl-mno'],})

我采取的第一步是对我的数据应用拆分,并拆分“-”

    List = df1['Col1].str.split('-')
List

产生输出:

    0     [abc, def, ghi, jkl]
1 [jkl, ghi, jkl, mno]
Name: Col1, dtype: object

我采取的第二步是将我的输出转换为列表:

    List = List.tolist()

产生:

    [['abc', 'def', 'ghi', 'jkl'], ['jkl', 'ghi', 'jkl', 'mno']]

我希望完成的最后一步是将完整列表与不同的唯一值列表进行比较:

    len(List) > len(set(List))

产生错误:

    TypeError: unhashable type: 'list'

我知道我的 .tolist() 创建了一个包含 2 个系列的列表。有没有办法将这些系列转换为列表以测试重复项?我想使用这段代码:

    len(List) > len(set(List)

为了删除每个单元格中具有重复值的所有行。

这是正确的接近方式,还是有更简单的方式?

我的最终输出应该是这样的:

     Col1
abc-def-ghi-jkl

因为字符串 jkl-ghi-jkl-mno 由于“jkl”重复两次而被丢弃

最佳答案

这是另一个选项,使用 setlen:

df1 = pd.DataFrame({'Col1' : ['abc-def-ghi-jkl', 'jkl-ghi-jkl-mno'],})

df1['length'] = df1['Col1'].str.split('-').apply(set).apply(len)

print( df1 )

Col1 length
0 abc-def-ghi-jkl 4
1 jkl-ghi-jkl-mno 3

df1 = df1.loc[ df1['length'] < 4 ]

print(df1)

Col1 length
1 jkl-ghi-jkl-mno 3

关于python - Pandas :根据列表中的重复值删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38753515/

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