pandas 将一行拆分为多行,将多行合并为一行

18 篇文章 2 订阅

需求描述

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

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

数据形式

数据处理前:

 最终统计的结果:

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

解决思路:

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())

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

总结一下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值