◆ ◆ ◆ ◆ ◆
Pandas
Pandas无疑是Python中用于数据分析最好的第三方库了。各种数据分析的日常应用场景下,我都会想Pandas能不能完成这个需求?会不会更简单?!话不多说,今天分享两个Pandas处理数据的小技巧。
按天统计不同类别商品销量占比
工作中的小技巧(一),希望大家get起来~\
| 日期 | 商品 | 销售额 | 占比 |
|---|---|---|---|
| 2020-05-01 | 苏菲 | 233 | |
| 2020-05-01 | 冈本 | 303 | |
| 2020-05-01 | 筋膜枪 | 296 | |
| 2020-05-01 | 口红 | 318 | |
| 2020-05-02 | 苏菲 | 106 | |
| 2020-05-02 | 冈本 | 392 | |
| 2020-05-02 | 筋膜枪 | 229 | |
| 2020-05-02 | 口红 | 162 | |
| 2020-05-03 | 苏菲 | 457 | |
| 2020-05-03 | 冈本 | 109 | |
| 2020-05-03 | 筋膜枪 | 281 | |
| 2020-05-03 | 口红 | 497 | |
| …… | |||
| 2020-05-14 | 苏菲 | 111 | |
| 2020-05-14 | 冈本 | 286 | |
| 2020-05-14 | 筋膜枪 | 245 | |
| 2020-05-14 | 口红 | 215 | |
| 2020-05-15 | 苏菲 | 260 | |
| 2020-05-15 | 冈本 | 226 | |
| 2020-05-15 | 筋膜枪 | 324 | |
| 2020-05-15 | 口红 | 246 |
工作中,这种问题还是比较多的。通过分析比较每天不同商品的销售额占比,再结合利润率情况,就可以知道公司下一步应该主推什么才能盈利,哪些商品的占比应该提高或者降低。或者也可以反映出哪些种类的商品更赚钱,对公司盈利层面更有帮助。\
# Python coding
>>> df = pd.read_csv('./sales.csv')
>>> df.set_index('日期',inplace = True)
>>> (100*df['销售额']/df['销售额'].sum(level = '日期')).round(2).map('{}%'.format)
日期
2020-05-01 20.26%
2020-05-01 26.35%
2020-05-01 25.74%
2020-05-01 27.65%
2020-05-02 11.92%
2020-05-02 44.09%
2020-05-02 25.76%
2020-05-02 18.22%
Name: 销售额, dtype: object
>>> df['占比'] = (100*df['销售额']/df['销售额'].sum(level = '日期')).round(2).map('{}%'.format)
>>> df.head(8)
如果各位有关于SQL的写法来解决此类问题,且比较简单的解法,欢迎与我交流~还望不吝赐教!\
Pandas实现group_concat功能
一般情况下,销售表的生成方式都是产生记录后,一条一条插入的。我们看到的表是一行一行的。但是,总有一些奇葩的需求,想把表横过来看看。所谓的换个角度看世界,我依然很穷!
如何实现上述图片的转换过程呢?!看代码吧~
>>> df.groupby('顾客').apply(lambda x:'-'.join(x['商品']))
感觉怪怪的!我是想说,这看起来没有字段名,也不太好吧。变个魔术即可~
>>> df.groupby('顾客').apply(lambda x:'-'.join(x['商品'])).reset_index().rename({0:'商品'},axis=1)
>>> df_gb = df.groupby('顾客').apply(lambda x:'-'.join(x['商品'])).reset_index().rename({0:'商品'},axis=1)
>>> df_gb
>>> df_gb['商品'].str.split('-',expand = True)
>>> df_gb[['商品1','商品2','商品3']] = df_gb['商品'].str.split('-',expand = True)
>>> df_gb
>>> df_gb.drop('商品',axis = 1,inplace = True)
>>> df_gb
完成~