【问题标题】:How to split a DataFrame into multiple DataFrames by row value? [duplicate]如何按行值将一个 DataFrame 拆分为多个 DataFrame? [复制]
【发布时间】:2020-12-29 01:01:16
【问题描述】:

我有一个如下图所示的数据框。我想根据行拆分数据框

     Rows            col1    value1      value2
0    row_1            var1     12         3434           
1    row_1            var2     212       546        
2    row_1            var3     340       8686       
3    row_2            var1     226        55      
4    row_2            var2     323        878        
97   row_33           var1     592        565        
98   row_33           var2     282       343    
99   row_33           var3     455        764      
100  row_34           var1     457        24        
101  row_34           var2     617        422          

预期的数据帧

Df1

     Rows            col1    value1      value2
0    row_1            var1     12         3434           
1    row_1            var2     212       546        
2    row_1            var3     340       8686                

Df2

     Rows            col1    value1      value2
0    row_2            var1     226        55     
1    row_2            var2     323        878     
2    row_2            var3     453        78               

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:
    • 您可以在'Rows' 上使用.groupby,并使用唯一的'Row' 值作为键创建DataFramesdict,并使用dict-comprehension
      • .groupby 返回一个groupby 对象,其中包含有关组的信息,其中g'Rows' 中每个组的唯一值,d 是该组的DataFrame
    • df_dict 中每个keyvalue 将是一个DataFrame,可以通过标准方式df_dict['key'] 访问。
    import pandas as pd
    
    # setup data and dataframe
    data = {'Rows': ['row_1', 'row_1', 'row_1', 'row_2', 'row_2', 'row_33', 'row_33', 'row_33', 'row_34', 'row_34'],
            'col1': ['var1', 'var2', 'var3', 'var1', 'var2', 'var1', 'var2', 'var3', 'var1', 'var2'],
            'value1': [12, 212, 340, 226, 323, 592, 282, 455, 457, 617],
            'value2': [3434, 546, 8686, 55, 878, 565, 343, 764, 24, 422]}
    
    df = pd.DataFrame(data)
    
    # split the dataframe and loop of the groupby object
    df_dict = dict()
    
    for g, d in df.groupby('Rows'):
        df_dict[g] = d
    
    
    # or as a dict comprehension: the unique Row value will be the key
    df_dict = {g: d for g, d in df.groupby('Rows')}
    
    
    # or a specific name for the key, using enumerate
    df_dict = {f'df{i}': d for i, (g, d) in enumerate(df.groupby('Rows'))}
    

    df_dict['df0']df_dict['row_1']

        Rows  col1  value1  value2
    0  row_1  var1      12    3434
    1  row_1  var2     212     546
    2  row_1  var3     340    8686
    

    df_dict['df1']df_dict['row_2']

        Rows  col1  value1  value2
    3  row_2  var1     226      55
    4  row_2  var2     323     878
    

    df_dict['df2']df_dict['row_33']

         Rows  col1  value1  value2
    5  row_33  var1     592     565
    6  row_33  var2     282     343
    7  row_33  var3     455     764
    

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 2018-03-10
      • 1970-01-01
      • 2019-11-25
      • 2019-11-30
      相关资源
      最近更新 更多