首页 > 解决方案 > 提取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']})

在此处输入图像描述

我该怎么做呢?

标签: pythonpandasdataframegrouping

解决方案


对组使用Series.str.isupperwithSeries.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

推荐阅读