三行代码  ›  专栏  ›  技术社区  ›  Mtaly

“set”无法在pandas中的列表列中获取唯一值

  •  1
  • Mtaly  · 技术社区  · 1 月前

    我不确定为什么“set”在下面的示例中没有唯一的值:

    df6 = pd.DataFrame({
                      'Name': ['Sara', 'John'],
                       'one': ['UK', 'UK'],
                       'two': ['IN', 'SA'],
                        'three': ['IN', 'IN'],
                         'four': ['IN', 'US']
                       })
    
    df6
    

    给予:

        Name    one     two    three    four
    0   Sara    UK      IN     IN       IN
    1   John    UK      SA     IN       US
    

    我在列表中连接了(一到四)列:

    df6['Concat'] = df6[['one','two','three','four']].apply(lambda x: [', '.join(x[x.notnull()])], axis = 1)
    

    给予:

        Name    one two three   four    Concat
    0   Sara    UK  IN  IN  IN  [UK, IN, IN, IN]
    1   John    UK  SA  IN  US  [UK, SA, IN, US]
    

    现在我只想在 Concat 每个名称对应的列:

    我尝试了以下方法:

    df6.Concat.apply(set)
    

    但结果与原始列表相同!

    0    {UK, IN, IN, IN}
    1    {UK, SA, IN, US}
    Name: Concat, dtype: object
    

    为什么“set”在这种情况下不起作用?

    我不想让唯一的列表有序,但只是为了提高我的学习能力,我如何才能让唯一的值有序?

    1 回复  |  直到 1 月前
        1
  •  2
  •   DYZ    1 月前

    你的 Concat 列包括 字符串列表 .这不是一份清单。当你申请时 set() 对于一个字符串,你可以得到一组字符串。你应该申请 set() 到原始数据列:

    df6[['one','two','three','four']].apply(set, axis=1)
    #0            {IN, UK}
    #1    {SA, IN, UK, US}
    

    参数 axis=1 指示 apply() 申请 set() 按排。