根据Pandas中的关键字对列进行分区

时间:2017-09-25 20:07:43

标签: python string pandas dataframe

我有一个excel文件,我已经将python作为数据框读入,如图所示。

   Store       List
   Ralphs      bag1   
               apple
               pear
   Ralphs      bag2
               toilet paper 
   Albertsons  bag3
               magazines
               paper

我正在尝试将第二列扩展为两列,如图所示。

   Bag       Item
   bag1      Apple
   bag1      Pear
   bag2      Toilet Paper       
   bag3      Magazines
   bag3      paper

只要原始表中列出了某个项目,商店列就会包含Na。是否有一些熊猫功能具有基于Na的独立功能?或者用所有袋子制作系列并将其作为切割点使用会更容易吗?

2 个答案:

答案 0 :(得分:1)

<强>设置

df
        Store          List
0      Ralphs          bag1
1      Ralphs         apple
2      Ralphs          pear
3      Ralphs          bag2
4      Ralphs  toilet paper
5  Albertsons          bag3
6  Albertsons     magazines
7  Albertsons         paper

您可以将df.wherestr.contains一起使用,提取以bag开头的所有行,然后过滤掉虚假行。

df = df.assign(Bag=df.List.\
       where(df.List.str.contains('bag')).ffill()).drop('Store', 1)
df[df.List != df.Bag]

           List   Bag
1         apple  bag1
2          pear  bag1
4  toilet paper  bag2
6     magazines  bag3
7         paper  bag3

答案 1 :(得分:0)

您可以添加一个列,该列分配给每个项目的行包然后按Sit amet lorem ipsum Lorem turpis ipsum, sit amet 分组,如下所示:

bag id

或,而不是df['bag'] = "bag"+df.List.str.contains('bag').cumsum().astype(str) df[['bag','List']].groupby('bag').apply(lambda x: x[1:]).reset_index(drop=True) ,过滤掉groupbydf.List == df.bagbag1 == bag1 ..)

的元素
bag2 == bag2

总体执行

df['bag'] = "bag"+df.List.str.contains('bag').cumsum().astype(str)    
df[df.List != df.bag].drop('Store', axis=1)