记录Pandas处理数据的两个小技巧

92 阅读3分钟

◆ ◆ ◆  ◆ ◆

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

完成~