是否按第一列中的某些值拆分数据帧?

2024-06-02 08:22:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据帧:

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是由字符串组成的,我想按此列中的值拆分数据帧,特别是其中的每个上面的单词。像这样:

^{pr2}$

有没有一个简单的方法来实现这一点?在


Tags: 数据字符串单词totalc2c1product1rs3
1条回答
网友
1楼 · 发布于 2024-06-02 08:22:00
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)

印刷品

^{pr2}$

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

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,根据这些分组号对数据帧进行分组。df.groupby(...)返回一个iterable,它允许您在子组中循环。在

相关问题 更多 >