【问题标题】:How to create multiple dataframes like a list by slicing by value in a column?如何通过按列中的值切片来创建多个数据框,如列表?
【发布时间】:2023-03-25 00:38:02
【问题描述】:

我需要从一个数据帧创建多个数据帧;要求是按已知值对数据帧进行切片并将其切片。到目前为止,我还没有找到类似的东西。

下面的玩具代码从我的数据记录器构建了一个 Pandas 数据框:

import pandas as pd

my_key = 0.0

df = pd.DataFrame({'A': [1.0,   2.0,  3.0, my_key, my_key, my_key,  5.0,  6.0,  7.0, my_key, my_key, my_key, 10.0, 11.0, 12.0], 
                   'B': [21.0, 22.0, 23.0,   23.1,   23.2,   23.3, 25.0, 26.0, 27.0,   27.1,   27.2,   27.3, 30.0, 31.0, 32.0]})

代码生成这个数据:

       A     B
0    1.0  21.0
1    2.0  22.0
2    3.0  23.0
3    0.0  23.1
4    0.0  23.2
5    0.0  23.3
6    5.0  25.0
7    6.0  26.0
8    7.0  27.0
9    0.0  27.1
10   0.0  27.2
11   0.0  27.3
12  10.0  30.0
13  11.0  31.0
14  12.0  32.0

目标是,使用“my_key”的值对 df 进行切片并生成 df1、df2 df3,如下面的预期输出。注意:这个玩具代码中的 my_var 有三个条目,在我的例子中,它可能包含三个不同的长度,df1、df2 和 df3 中的任何一个也可能包含不同的值。

df1:

  A     B
1.0  21.0
2.0  22.0
3.0  23.0

df2:

  A     B
5.0  25.0
6.0  26.0
7.0  27.0

和df3:

   A     B
10.0  30.0
11.0  31.0
12.0  32.0

【问题讨论】:

    标签: python pandas list slice


    【解决方案1】:

    你可以这样做:

    eq_key = df['A'].eq(my_key)
    groups = (eq_key != eq_key.shift(1)).cumsum()
    
    res = [group for _, group in df[~eq_key].groupby(groups[~eq_key])]
    
    for g in res:
        print(g)
    

    输出

         A     B
    0  1.0  21.0
    1  2.0  22.0
    2  3.0  23.0
         A     B
    6  5.0  25.0
    7  6.0  26.0
    8  7.0  27.0
           A     B
    12  10.0  30.0
    13  11.0  31.0
    14  12.0  32.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 2020-03-31
      • 2018-01-22
      • 2020-08-06
      • 2015-06-25
      • 2017-04-01
      相关资源
      最近更新 更多