Python:当两者都位于原始数据的同一列中时,为组标签和各个单元创建单独的列



我是Python的新手,我怀疑这个问题可能是以前曾问过的,但是我真的找不到任何相关线程。因此,问题。

我打算创建一个数据框

import pandas as pd
df = pd.read_table('df.txt',  names = 'data')

读取

        data
0 group1
1 unit_a
2 unit_b
3 group2
4 unit_c
5 unit_d
6 unit_e
7 group3
8 unit_f
9 unit_g
...

,但我想创建一个这样的数据框架

       Group   Unit
    0 group1 unit_a
    1 group1 unit_b
    2 group2 unit_c
    3 group2 unit_d
    4 group2 unit_e
    5 group3 unit_f
    6 group3 unit_g
    ...

也就是说,在原始数据中,单位在其各自的组标签下列出,它们都在同一列中列出,而每个组可能包含不同数量的单位。因此,我很难使用间隔或其他方法切片数据。我如何将原始数据分类或将原始数据切成所需的两列数据框架类型输出?

预先感谢。

一种非常基本的方法是只使用str.contains分配带有屏蔽值的新列,过滤列匹配的行(例如group1, group1),然后重置索引。

df = (df.assign(group=df[df.data.str.contains('group')])
        .ffill()
        .query('data != group')
        .reset_index(drop=True)
        .rename(columns={'data':'unit'}))

我不禁觉得有一种更简单的方法可以解决这个问题。

演示

>>>> (df.assign(group=df[df.data.str.contains('group')])
        .ffill()
        .query('data != group')
        .reset_index(drop=True))  
        .rename(columns={'data':'unit'}))
     unit   group
0  unit_a  group1
1  unit_b  group1
2  unit_c  group2
3  unit_d  group2
4  unit_e  group2
5  unit_f  group3
6  unit_g  group3

最新更新