如何通过按列中的值切片来创建多个数据框,如列表?
How to create multiple dataframes like a list by slicing by value in a column?
我需要从一个数据帧创建多个数据帧;要求是按已知值对数据帧进行切片并将其切片。到目前为止我还没有找到类似的东西。
下面的玩具代码从我的数据记录器构建了一个 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
你可以这样做:
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
我需要从一个数据帧创建多个数据帧;要求是按已知值对数据帧进行切片并将其切片。到目前为止我还没有找到类似的东西。
下面的玩具代码从我的数据记录器构建了一个 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
你可以这样做:
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