如何在最后一行中以零值删除Pandas DataFrame列

时间:2018-07-31 11:59:48

标签: python pandas dataframe

我有一个Pandas数据框,它告诉我商店中商品的每月销售额 df.head()

    ID      month   sold
0   150983  0       1.0
1   56520   0       13.0
2   56520   1       7.0
3   56520   2       13.0
4   56520   3       8.0

我要删除上个月没有销售的所有ID。即month == 33 & sold == 0。执行以下操作

unwanted_df = df[((df['month'] == 33) & (df['sold'] == 0.0))]

我只得到46行,这太少了。但没关系,无论如何,我都希望数据具有不同的格式。上面的数据透视表正是我想要的:

pivoted_df = df.pivot(index='month', columns = 'ID', values = 'sold').fillna(0)
pivoted_df.head()

ID  0   2   3   5   6   7   8   10  11  12  ... 214182  214185  214187  214190  214191  214192  214193  214195  214197  214199
month                                                                                   
0   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     1.0     0.0
1   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
2   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 ... 0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
3   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0
4   0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 ... 0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0     0.0

问题。如何删除pivoted_df最后一行中值为0的列?

2 个答案:

答案 0 :(得分:2)

您可以用一行完成此操作:

pivoted_df= pivoted_df.drop(pivoted_df.columns[pivoted_df.iloc[-1,:]==0],axis=1)

答案 1 :(得分:0)

  

我要删除上个月没有销售的所有ID

您可以首先计算满足您条件的ID:

id_selected = df.loc[(df['month'] == 33) & (df['sold'] == 0), 'ID']

然后通过布尔掩码从您的数据框中过滤掉这些变量:

df = df[~df['ID'].isin(id_selected)]

最后,对过滤的数据框使用pd.pivot_table