提取 python pandas 数据框中单个列中包含的分组
Extracting groupings contained within a single column in a python pandas Dataframe
有一个 excel 文件,如下图所示:
使用 pd.read_excel()
后,我的数据框如下所示:
pd.DataFrame({'Accessory Description':['GROUP1','item1', 'item2','item3','item4','item5','GROUP2','item6','item7','item8'
,'item9','item10','GROUP3','item11','item12','item13','item14','item15']})
但是我想操纵数据框,使其显示如下所示:
pd.DataFrame({'Group':['Group1','Group1','Group1','Group1','Group1','Group2','Group2','Group2','Group2','Group2'
,'Group3','Group3','Group3','Group3','Group3']
,'Accessory Description':['item1', 'item2','item3','item4','item5','item6','item7','item8'
,'item9','item10','item11','item12','item13','item14','item15']})
我该怎么做?
对组使用 Series.str.isupper
with Series.where
和 ffill,然后删除两列中具有相同值的行:
s = df['Accessory Description'].where(df['Accessory Description'].str.isupper()).ffill()
df.insert(0, 'Group', s)
df = df[df['Group'].ne(df['Accessory Description'])].reset_index(drop=True)
print (df)
Group Accessory Description
0 GROUP1 item1
1 GROUP1 item2
2 GROUP1 item3
3 GROUP1 item4
4 GROUP1 item5
5 GROUP2 item6
6 GROUP2 item7
7 GROUP2 item8
8 GROUP2 item9
9 GROUP2 item10
10 GROUP3 item11
11 GROUP3 item12
12 GROUP3 item13
13 GROUP3 item14
14 GROUP3 item15
有一个 excel 文件,如下图所示:
使用 pd.read_excel()
后,我的数据框如下所示:
pd.DataFrame({'Accessory Description':['GROUP1','item1', 'item2','item3','item4','item5','GROUP2','item6','item7','item8'
,'item9','item10','GROUP3','item11','item12','item13','item14','item15']})
但是我想操纵数据框,使其显示如下所示:
pd.DataFrame({'Group':['Group1','Group1','Group1','Group1','Group1','Group2','Group2','Group2','Group2','Group2'
,'Group3','Group3','Group3','Group3','Group3']
,'Accessory Description':['item1', 'item2','item3','item4','item5','item6','item7','item8'
,'item9','item10','item11','item12','item13','item14','item15']})
我该怎么做?
对组使用 Series.str.isupper
with Series.where
和 ffill,然后删除两列中具有相同值的行:
s = df['Accessory Description'].where(df['Accessory Description'].str.isupper()).ffill()
df.insert(0, 'Group', s)
df = df[df['Group'].ne(df['Accessory Description'])].reset_index(drop=True)
print (df)
Group Accessory Description
0 GROUP1 item1
1 GROUP1 item2
2 GROUP1 item3
3 GROUP1 item4
4 GROUP1 item5
5 GROUP2 item6
6 GROUP2 item7
7 GROUP2 item8
8 GROUP2 item9
9 GROUP2 item10
10 GROUP3 item11
11 GROUP3 item12
12 GROUP3 item13
13 GROUP3 item14
14 GROUP3 item15