gpt4 book ai didi

python - 按第一列中的某些值拆分数据框?

转载 作者:行者123 更新时间:2023-11-28 22:30:41 25 4
gpt4 key购买 nike

我有这样一个数据框:

A          C1   C2   Total 

PRODUCT1 8 11 19
rs1 5 9 14
rs2 2 2 4
rs3 1 0 1
PRODUCT2 21 12 33
rs7 11 7 18
rs2 7 3 10
rs1 3 1 4
rs9 0 1 1
PRODUCT3 2 11 13
rs9 1 6 7
rs5 1 5 6

A 列由字符串组成,我想按此列中的值拆分我的数据框,特别是其中的每个大字。像这样:

df1 = 

PRODUCT1 8 11 19
rs1 5 9 14
rs2 2 2 4
rs3 1 0 1

df2 =

PRODUCT2 21 12 33
rs7 11 7 18
rs2 7 3 10
rs1 3 1 4
rs9 0 1 1

df3 =

PRODUCT3 2 11 13
rs9 1 6 7
rs5 1 5 6

有没有简单的方法可以做到这一点?

最佳答案

import pandas as pd
df = pd.DataFrame({'A': ['PRODUCT1', 'rs1', 'rs2', 'rs3', 'PRODUCT2', 'rs7', 'rs2', 'rs1', 'rs9', 'PRODUCT3', 'rs9', 'rs5'], 'C1': [8, 5, 2, 1, 21, 11, 7, 3, 0, 2, 1, 1], 'C2': [11, 9, 2, 0, 12, 7, 3, 1, 1, 11, 6, 5], 'Total': [19, 14, 4, 1, 33, 18, 10, 4, 1, 13, 7, 6]})

for key, group in df.groupby(df['A'].str.isupper().cumsum()):
print(group)

打印

          A  C1  C2  Total
0 PRODUCT1 8 11 19
1 rs1 5 9 14
2 rs2 2 2 4
3 rs3 1 0 1
A C1 C2 Total
4 PRODUCT2 21 12 33
5 rs7 11 7 18
6 rs2 7 3 10
7 rs1 3 1 4
8 rs9 0 1 1
A C1 C2 Total
9 PRODUCT3 2 11 13
10 rs9 1 6 7
11 rs5 1 5 6

这里的想法是识别大写的行:

In [95]: df['A'].str.isupper()
Out[95]:
0 True
1 False
2 False
3 False
4 True
5 False
6 False
7 False
8 False
9 True
10 False
11 False
Name: A, dtype: bool

然后使用cumsum求和,其中True被视为1,False被视为0:

In [96]: df['A'].str.isupper().cumsum()
Out[96]:
0 1
1 1
2 1
3 1
4 2
5 2
6 2
7 2
8 2
9 3
10 3
11 3
Name: A, dtype: int64

这些值可以用作组号。将它们传递给 df.groupby 以根据这些组号对 DataFrame 进行分组。 df.groupby(...) 返回一个可迭代对象,它允许您遍历子组。

关于python - 按第一列中的某些值拆分数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42044633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com