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文件

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这段代码的作用是读取Excel文件中的数据,查找重复行,将重复行中的要合并的列合并成一个字符串,删除重复行,将合并后的数据写入新的Excel文件。其中,要合并的列为'evidence',需要判重的字段为'name', 'units_name', 'tag'。 需要注意的是,这段代码中有两次使用`groupby()`方法进行分组。第一次是为了查找重复行,并将重复行中的要合并的列合并成一个字符串;第二次是为了将重复行中的要合并的列直接修改为合并后的字符串。这两次分组的结果是不同的,因为第一次使用了`apply()`方法,第二次直接使用了`lambda`函数。 此外,如果要将该代码更改为覆盖原参数的函数,可以按照以下步骤进行修改: 1. 将`groupby()`方法中的`inplace=True`参数删除,改为使用`loc[]`方法直接在原始DataFrame上进行修改。 2. 将第一次分组的结果直接赋值给重复行中的要合并的列,而不是创建一个新的DataFrame。 3. 将第二次分组的操作删除,因为已经在第一次分组中将要合并的列直接修改为了合并后的字符串。 修改后的代码如下所示: ``` import pandas as pd # 读取Excel文件 df = pd.read_excel('C:\\Users\\ASUS\\Desktop\\干部标签相同项目合并\\标签测试功能.xlsx') # 指定需要判重的字段和需要合并的字段 dup_cols = ['name', 'units_name', 'tag'] merge_col = 'evidence' # 查找重复行 dup_rows = df.duplicated(subset=dup_cols, keep=False) # 合并数据 df.loc[dup_rows, merge_col] = df[dup_rows].groupby(dup_cols)[merge_col].transform(lambda x: x.astype(str).str.cat(sep='\n')) # 重置索引列 df.reset_index(drop=True, inplace=True) # 删除重复行 df.drop_duplicates(subset=dup_cols, keep='first', inplace=True) # 将处理后的数据写入新的Excel文件 df.to_excel('C:\\Users\\ASUS\\Desktop\\干部标签相同项目合并\\new_file.xlsx', index=False) ``` 以上代码实现了与原始代码相同的功能,但使用了原地修改的方式,即将结果直接覆盖在原始DataFrame上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值