2017-10-05 81 views
0

我有一个DF删除无细胞,如何从一个数据帧在python

 contents values scoresBinned categories 
    0 Buy   484 (375, 500]  Bin 4 
    1 Sell   429 (375, 500]  Bin 4 
    2 Blanks  130 (125, 250]  Bin 2 
    3 A    108 (0, 125]   Bin 1 
    4 B    77 (0, 125]   Bin 1 
    5 F    2 (0, 125]   Bin 1 

,因为我需要为宾我的头,我做的DF,枢

filter_df1=df[["contents","categories"]] 

pivot_df=filter_df1.pivot(columns="categories") 

print(pivot_df) 

       contents 
    categories Bin 1  Bin 2 Bin 4 
     0  None  None Buy 
     1  None  None Sell 
     2  None  Blanks None 
     3  A   None None 
     4  B   None None 
     5  F   None None 

我试过df.dropna (),但它会删除整个行,

我期望df是,

  Bin 1  Bin 2 Bin 4 
      A   Blanks Buy 
      B     Sell 
      F   
+1

你怎么输出你的数据帧? – WhatsThePoint

+0

你想要的数据帧没有意义。从数据框中删除单个“单元格”是没有意义的。你想要的输出将数值放入它们以前不在的行中,即它完全忽略数据并返回一些毫无意义的东西。 –

+0

我编辑了我的问题,请检查 – pyd

回答

1

您可以使用sorted,boolean indexingfillna来做到这一点。

pm = pivot_df.apply(sorted,key=pd.isnull) 
new = pm[~pd.isnull(pm).all(1)].fillna('') 

输出:

 
      contents    
categories Bin 1 Bin 2 Bin 4 
0     A Blanks Buy 
1     B   Sell 
2     F    

说明

排序基于无会给

 
      contents    
categories Bin 1 Bin 2 Bin 4 
0     A Blanks Buy 
1     B None Sell 
2     F None None 
3    None None None 
4    None None None 
5    None None None 

现在选择那些行,其中的所有行中值是不为空。所以我们可以使用~pd.isnull(pm).all(1)(这里~不是操作符,它会将真假转换为真,反之亦然)。这将给

 
0  True 
1  True 
2  True 
3 False 
4 False 
5 False 
dtype: bool 

后来boolen索引来选择数据即pm[~pd.isnull(pm).all(1)]

 
     contents    
categories Bin 1 Bin 2 Bin 4 
0     A Blanks Buy 
1     B None Sell 
2     F None None 

fillna('')将填补没有与''值。希望能帮助到你。

+0

它的工作,你能解释这一行,新=下午[〜pd.isnull(pm).all(1)]。fillna('') – pyd

+0

确保检查编辑。 – Dark