pandas根据某列值为key整合其他列值,拆分某列值增加多行数据

一、根据某列值为key,整合其他列值

直接上例子:

import pandas as pd 
import numpy as np 
df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
                    'data1': range(7)})
df1

在这里插入图片描述
整合,根据key值,对于同一个key值,有多个data1与之对应,将多个data1之间用分隔符\t连接,作为一个元素:

ex_data = df1.groupby(['key'], as_index=True)['data1'].apply(lambda x :'\t'.join(list([str(i) for i in x])))
ex_data 

在这里插入图片描述

type(ex_data)

pandas.core.series.Series

exx_data = pd.DataFrame(ex_data)
exx_data.columns

Index([‘data1’], dtype=‘object’)

exx_data

在这里插入图片描述

exx_data.reset_index(inplace=True)
exx_data

在这里插入图片描述

如果此时有其他列的值需要保留

例如:

df1 = pd.DataFrame({'key': ['b','b','a','c','a','a','b'],
                    'data1': [0, 0, 2, 3, 4, 5, 6],
                    'data2': [1, 1, 2, 3, 2, 2, 1]})
df1

在这里插入图片描述
现在我们想根据key聚合data1,如果能保证 key 和data2是一一对应的,且我们想保留data2,此时得到:
在这里插入图片描述
我们需要对df1去掉data1列然后去重:

df1.drop(['data1'], inplace=True, axis = 1)
df1.drop_duplicates(['key', 'data2'], inplace=True)
df1

在这里插入图片描述

将df1 和exx_data进行merge :

df_new = df_ex.merge(df1, on = 'key')
df_new

在这里插入图片描述

二、拆分某列值增加多行数据

其实就是一过程的逆过程:

x1 = exx_data['data1'].str.split('\t', expand=True)
x1

在这里插入图片描述

x2 = x1.stack()
x2

在这里插入图片描述

x3 = x2.reset_index(level = 1, drop = True)
x3

x4 = x3.rename('data_x')
x4

在这里插入图片描述

x5 = exx_data.join(x4)
x5

一步到位:

x5 = exx_data.join(data['data1'].str.split('\t', expand=True).stack().reset_index(level=1, drop=True).rename('data_x'))

参考:
https://cloud.tencent.com/developer/ask/28278

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值