当在数据框列中找到某个值时,如何将 pandas 数据框分解为子数据框?
How to break a pandas dataframe into sub dataframes when a certain value is found in the dataframe column?
我有这样的数据框:
data = pd.DataFrame({"event": ["A", "B", "C", "A", "A", "E", "P", "S", "A", "Y", "A"]})
data.head(15)
event
0 A
1 B
2 C
3 A
4 A
5 E
6 P
7 S
8 A
9 Y
10 A
每当发现事件“A”时,我想将此数据帧分成 5 个小数据帧。所以我想创建的五个数据框在这种情况下看起来像这样:
1) event
0 A
1 B
2 C
2) event
0 A
3) event
0 A
1 E
2 P
3 S
4) event
0 A
1 Y
5) event
0 A
有什么优雅的方法可以用 Python Pandas 和 Pyspark 做到这一点吗?
使用 pandas,使用 groupby
和使用 data['event'].eq('A').cumsum()
的辅助石斑鱼:
dfs = [g for _,g in data.groupby(data['event'].eq('A').cumsum())]
或者要获取新索引,请添加 reset_index
:
dfs = [g.reset_index(drop=True)
for _,g in data.groupby(data['event'].eq('A').cumsum())]
输出(没有reset_index
):
[ event
0 A
1 B
2 C,
event
3 A,
event
4 A
5 E
6 P
7 S,
event
8 A
9 Y,
event
10 A]
我有这样的数据框:
data = pd.DataFrame({"event": ["A", "B", "C", "A", "A", "E", "P", "S", "A", "Y", "A"]})
data.head(15)
event
0 A
1 B
2 C
3 A
4 A
5 E
6 P
7 S
8 A
9 Y
10 A
每当发现事件“A”时,我想将此数据帧分成 5 个小数据帧。所以我想创建的五个数据框在这种情况下看起来像这样:
1) event
0 A
1 B
2 C
2) event
0 A
3) event
0 A
1 E
2 P
3 S
4) event
0 A
1 Y
5) event
0 A
有什么优雅的方法可以用 Python Pandas 和 Pyspark 做到这一点吗?
使用 pandas,使用 groupby
和使用 data['event'].eq('A').cumsum()
的辅助石斑鱼:
dfs = [g for _,g in data.groupby(data['event'].eq('A').cumsum())]
或者要获取新索引,请添加 reset_index
:
dfs = [g.reset_index(drop=True)
for _,g in data.groupby(data['event'].eq('A').cumsum())]
输出(没有reset_index
):
[ event
0 A
1 B
2 C,
event
3 A,
event
4 A
5 E
6 P
7 S,
event
8 A
9 Y,
event
10 A]