pandas 将一行拆分为多行,将多行合并为一行
创始人
2024-03-12 20:41:00
0次

需求描述

  • 在今天的数据需求,现在要统计各个场景下的类目种类数,并列出对应都有哪些类目。
  •  现在面临的问题是:每个客户的应用场景不同,购买的类目也有多种。

🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞🎞

数据形式

数据处理前:

 最终统计的结果:

拆开来看,分两大块一部分是统计最适场景的类目数、一部分是统计最适场景的类目组合 

解决思路:

1、首先将原始数据中用到的列提取出来,一行拆分为多行

2、对原始数据进行去重处理,得到最新的数据

  • 统计最适场景的类目数

       使用pandas中的pivot_table()。

  • 统计最适场景的类目组合

        将各个场景下的,类目进行拼接。

具体实现代码:

1、首先将原始数据中用到的列提取出来,一行拆分为多行

data2_1 =data2[['类目','最适场景']]
data2_1['类目1'] = data2_1['类目']
data2_1 = data2_1.drop(['类目1'], axis=1).join(data2_1['类目1'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('类目_new'))
print(data2_1.head())

2、便于后面的统计,对原始数据进行去重处理,得到最新的数据

data2_1 =data2_1[['最适场景','类目_new']]
data2_1.drop_duplicates(inplace =True) #对数据进行去重
  • 统计最适场景的类目数

kind_1 =pd.pivot_table(data2_1,values =['类目_new'],index =['最适场景'],aggfunc ={ '类目_new':lambda x :len(x.dropna().unique())},fill_value =0).reset_index(drop=False).rename(columns ={'类目_new':'类目数'})
print(kind_1.head())

  • 统计最适场景的类目组合
# 创建函数,用于聚合场景购买品类的集合
def fun_join(x):return ','.join(x.values)kind_2 =data2_1.groupby(by = '最适场景').agg(fun_join).reset_index().rename(columns ={'类目_new':'类目组合'}) #获得最近一次购买产品的组合kind =pd.merge(kind_1,kind_2,on =['最适场景'],how ='inner')
print(kind.head())

 至此,已经完成了这个数据需求。

总结一下:

在这个数据需求里面最重要的两点,一个是数据的拆分;一个是数据的合并。

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...