我有一个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的列?
答案 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
。