【问题标题】:Convert a column in DataFrame to list and another column to set将 DataFrame 中的一列转换为列表,将另一列转换为设置
【发布时间】:2023-01-14 01:32:44
【问题描述】:

我想将数据框中的一些列转换为列表,将一些列转换为具有相似名称的设置 给定的数据框,df:

    Name    id     other           list
0   ben  00005     abc      [1000, A, 90]
1  alex  00006     gf       [3000, B, 80]
2  linn  00007     jgj      [600, C, 55]
3  luke  00009     gg       [5000, D, 88]
4  alex  00001     gf      [7000, R, 98]
5  ben  00002      abc      [9000, S, 28]
6  ben   00003     abc      [5000, T, 48]

所需的输出,df1:

   Name    id                   other           list
0   ben  {00005, 0002,0003}     abc      [[1000, A, 90],[9000, S, 28],[5000, T, 48]]
1  alex  {00006,0001}           gf       [3000, B, 80], [7000, R, 98]
2  linn  {00007}                jgj      [600, C, 55]
3  luke  {00009}                gg       [5000, D, 88]

【问题讨论】:

    标签: python pandas list dataframe set


    【解决方案1】:

    您可以将 .groupby().agg() 一起使用:

    df.groupby("Name", as_index=False).agg({"id": set, "other": "first", "list": list})
    

    这输出:

       Name                     id other                                           list
    0  alex         {00001, 00006}    gf                 [[3000, B, 80], [7000, R, 98]]
    1   ben  {00005, 00003, 00002}   abc  [[1000, A, 90], [9000, S, 28], [5000, T, 48]]
    2  linn                {00007}   jgj                                 [[600, C, 55]]
    3  luke                {00009}    gg                                [[5000, D, 88]]
    

    【讨论】:

      【解决方案2】:

      您可以使用 groupby() 方法按“名称”列对数据框进行分组,然后使用 agg() 函数将“id”列转换为集合,将“列表”列转换为列表列表。以下是如何实现此目标的示例:

      import pandas as pd
      
      # Example dataframe
      df = pd.DataFrame({'Name': ['ben', 'alex', 'linn', 'luke', 'alex', 'ben', 'ben'],
                        'id': [5, 6, 7, 9, 1, 2, 3],
                        'other': ['abc', 'gf', 'jgj', 'gg', 'gf', 'abc', 'abc'],
                        'list': [[1000, 'A', 90], [3000, 'B', 80], [600, 'C', 55], [5000, 'D', 88], [7000, 'R', 98], [9000, 'S', 28], [5000, 'T', 48]]})
      
      # Group dataframe by 'Name' column
      grouped_df = df.groupby('Name')
      
      # Use agg() function to convert 'id' column to set and 'list' column to list of lists
      df1 = grouped_df.agg({'id': set, 'other': 'first', 'list': list})
      
      print(df1)
      

      这将为您提供所需的输出:

      Name        id     other        list
                                                                
      alex      {1, 6}    gf         [[3000, 'B', 80], [7000, 'R', 98]]
      ben       {2, 3, 5} abc        [[1000, 'A', 90], [9000, 'S', 28], [5000, 'T', 48]]
      luke      {9}       gg         [[5000, 'D', 88]]
      linn      {7}       jgj        [[600, 'C', 55]]
      

      【讨论】:

        猜你喜欢
        • 2021-01-08
        • 2019-05-19
        • 2022-01-07
        • 2017-02-20
        • 2019-06-22
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 2021-03-01
        相关资源
        最近更新 更多