Pandas的Dataframe,按条件求和groupby, sum,去重drop_duplicates,左右合并merge

import pandas as pd

data = pd.read_csv (u"C:\\Users\\...\\data.csv" , header=0, encoding = "GBK")
new = pd.DataFrame()

for column in ['销量','金额']:
#'score_hownet','score_boson','score_1how','score_1bos','score_howbos','score_alldict']:
    grouped = data[column].groupby(data['编码']) # 以 编码 为key 求和
    dfnew=grouped.sum()
    new[column]=dfnew
new=new.reset_index()   #   将 编码 ,从index中放入列中

data=data.drop(['商品编码','商品名称','库存','销量','金额'], axis=1)
newdata=data.drop_duplicates(['编码','店铺名称'],'first',False)

newdata = pd.merge(newdata,new,on='编码')

newdata.to_csv('newdata.csv', sep=',', header=True)

在处理数据过程中遇到了一定需求,借助几个函数有效解决了。

需求,也即要解决的问题如下:

1.读取已知csv文件

这里要注意,路径中不是单斜杠“\”,而是双斜杠"\\"

单斜杠会导致读取文件路径过程中,dataframe报错:

'unicodeescape' codec can't decode bytes in position xx: truncated \UXXXXXXXX escape

 

2.根据特定列,对已知数据求和

如 代码例子中,我根据每个店铺的编码 groupby,对该店铺内的商品销售量、销售金额进行了sum()求和,并存为新dataframe格式

 

3.提取index,形成新的列

由于groupby会让 条件,也即本例中的“编码”,变成index,所以需要reset_index()将其放入dataframe中,方便后续合并。

 

4.原表去重

新的数据表中,我希望以每个店铺为单位,而非原来的以每个店铺的每个商品为单位。

因此我首先drop删除了 每个商品尺度的数据,如 商品编码,名称,库存量,销售量,销售金额等。

之后,利用 drop_duplicates 根据 [‘key1’,'key2'],可以针对组合列进行去重;

'first'表示默认保存第一列;'False'表示不在原表上修改,而是生成新数据

 

5.横向合并

merge(data1,data2,key),以key为核心,进行拼接

 

 

你可能感兴趣的:(学习笔记)