2017-09-25 102 views
1

我有一個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的分離功能的熊貓功能?或者是否可以更容易地創建一個包含所有包的系列,並將其用作切割點?

+0

如果你的問題得到回答,請[接受一個幫助最(https://stackoverflow.com/help/someone-answers)。 –

回答

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 
0

可以添加分配給每個項目,然後其袋GROUPBY 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) 

,或者代替groupby,濾除其中df.List == df.bag(其將是bag1 == bag1的元素, bag2 == bag2 ..)

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

總體執行

In [83]: df 
Out[83]: 
     Store   List 
0  Ralphs   bag1 
1   NaN   apple 
2   NaN   pear 
3  Ralphs   bag2 
4   NaN toilet paper 
5 Albertsons   bag3 
6   NaN  magazines 
7   Nan   paper 

In [84]: df['bag'] = "bag"+df.List.str.contains('bag').cumsum().astype(str) 

In [85]: df[['bag','List']].groupby('bag').apply(lambda x: x[1:]).reset_index(drop=True) 
Out[85]: 
    bag   List 
0 bag1   apple 
1 bag1   pear 
2 bag2 toilet paper 
3 bag3  magazines 
4 bag3   paper 
相關問題