我是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
...
也就是说,在原始数据中,单位列在各自的组标签下,并且它们都列在同一列中,而每个组可能包含不同数量的单位。所以我很难使用间隔或其他方法切片数据。如何将原始数据排序或切片到我想要的双列数据帧类型输出中?
提前致谢。
答案 0 :(得分:0)
一种非常基本的方法是使用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