【问题标题】:Make a new column based on other columns id values - Pandas根据其他列 id 值创建一个新列 - Pandas
【发布时间】:2020-08-18 05:15:22
【问题描述】:

如何根据其他列的 id 值创建新列?

数据如下所示。

value       id
551        54089
12         54089
99         54089
55         73516
123        73516
431        73516
742        74237
444        74237
234        74237

我希望数据集看起来像这样。

         v1     v2    v3
54089   551     12    99
73516   55      123   431
74237   742     444   234

【问题讨论】:

    标签: python pandas dataset


    【解决方案1】:

    groupbyunstack 一起使用:

    df = df.groupby('id')['value'].apply(lambda x: pd.Series(x.tolist(), 
                                                             index=['v1', 'v2', 'v3']))\
                                  .unstack()
    # or
    
    df.groupby('id')['value'].apply(lambda x: pd.DataFrame(x.tolist(), 
                                                           index=['v1', 'v2', 'v3']).T)
    
    print(df)
            v1   v2   v3
    id                  
    54089  551   12   99
    73516   55  123  431
    74237  742  444  234
    

    【讨论】:

      【解决方案2】:

      如果您有 3 个以上的值,您可以创建一个小助手,以适应您的数据框的大小。

      import pandas as pd
      import numpy as np
      
      
      #Dummy Dataframe
       np.random.seed(2016)
       df = pd.DataFrame({'id': 
      [54089, 54089, 54089, 73516, 73516, 73516, 73516, 74237, 74237,74237],
                          'value': np.random.randint(1, 100, 10)})
      #Create group
      grp = df.groupby('id')
      
      #Create helper column 
       df['ID_Count'] = grp['value'].cumcount() + 1
      
       #Pivot dataframe using helper column and add 'value' column to pivoted output.
       df_out = df.pivot('id','ID_Count','value').add_prefix('v')
      

      【讨论】:

        【解决方案3】:

        已经提供的优秀答案的补充:

        (df.astype({'value':str})
         .groupby('id')
         .agg(','.join)
         .value.str.split(',',expand=True)
         .set_axis(['v1','v2','v3'],axis=1)
         .astype(int)
        )
        
                v1  v2  v3
        id          
        54089   551 12  99
        73516   55  123 431
        74237   742 444 234
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-07-08
          • 2021-08-27
          • 1970-01-01
          • 2021-03-19
          • 1970-01-01
          • 1970-01-01
          • 2017-08-26
          相关资源
          最近更新 更多