我是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