相关文章推荐
飘逸的饭卡  ·  dataframe split ...·  3 月前    · 
想出国的拐杖  ·  python dataframe ...·  3 月前    · 
健壮的皮带  ·  python DataFrame循环读取 ...·  2 月前    · 
直爽的青蛙  ·  创建第一个管道 - Azure ...·  11 月前    · 
刚毅的灭火器  ·  'devcon' ...·  1 年前    · 
首页 > 脚本专栏 > python > pandas将相同ID的字符串进行合并

pandas中实现将相同ID的字符串进行合并

作者:Just_do_it_2018

这篇文章主要介绍了pandas中实现将相同ID的字符串进行合并问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
id value 1 A 1 B 1 C 2 D 2 E 2 F id value 1 [A,B,C] 2 [D,E,F] pandas怎么把上面的结构变为下面的形式?

自己的解决方案

import pandas as pd
import numpy as np
data = pd.DataFrame({'id':[1,1,1,2,2,2],'value':['A','B','C','D','E','F']})
data1 = np.array(data.groupby(['id']))#按照id进行分类
# 转变成array对象之后,可以根据data1[0][1]查看其结构
id_kinds = 2#id的种类,此例比如1、2共两种
all_value = []
for j in range(2):
    value = []
    for i in data1[j][1]['value']:
        value.append(i)
    all_value.append(value)
print(all_value)
#再创建新的dataframe
new_data = pd.DataFrame({'id':[1,2],'value':all_value})
print(new_data)

输出结果为:

id      value
0   1  [A, B, C]
1   2  [D, E, F]

大神的更优化的解法

可以用sum方法,将字符串进行连接

import pandas as pd
import numpy as np
data = pd.DataFrame({'id':[1,1,1,2,2,2],'value':['A','B','C','D','E','F']})
data1 = data.groupby(by='id')['value'].sum()

此时的输出结果为:

id
1    ABC
2    DEF
Name: value, dtype: object

但是还不是我们想要的,因为我们还需要在中间加入逗号分隔

① 我们可以先将原始数据的value都变成“,A”

data = pd.DataFrame({'id':[1,1,1,2,2,2],'value':['A','B','C','D','E','F']})
data['value'] = data['value'].apply(lambda x:','+ x)

② 然后,对其使用sum方法进行字符串相加

data1 = data.groupby(by='id').sum()

此时的输出结果为,value值之前多了“,”

id  value
1   ,A,B,C
2   ,D,E,F

③ 最后,对该列使用apply函数,去除‘,’

data1['value'] = data1['value'].apply(lambda x :[x[1:]])

就得到了最终的结果:

id  value
1   [A,B,C]
2   [D,E,F]

对分组之后的结果,直接使用apply函数

一行代码就搞定!

data1 = data.groupby(by='id').apply(lambda x:[','.join(x['value'])])

那为什么可以这么做呢?

首先需要剖析的是,groupby之后的数据结构是什么样的,它是由元组构成的(分组名,数据块),数据块也就是dataframe结构。使用以下方式可以查看groupby之后的对象:

for ID,group in group_df:
    print(ID)
    print(group)

apply函数中的x作用的即是数据块(dataframe),通过数据块取value那一行得到的是Series对象,于是可以使用join方法进行操作。

sum方法不仅可以用于数值计算,还可用于对于一个Series对象而言的字符串相加

a = ['a','b']
c = pd.Series(a).sum()

apply函数非常灵活,不仅可以作用于一个Series对象,还可以作用于一个groupby之后的数据块

data['value'].apply(lambda x :*****)
data.groupby(by='**').apply(lambda x :*****)

lambda匿名函数可以极大优化精简我们的代码,是一个非常灵活好用的函数,记住它!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • Python中time库的使用(日期时间)
    Python中time库的使用(日期时间)
    2023-02-02
  • Python使用conda如何安装requirement.txt的扩展包
    Python使用conda如何安装requirement.txt的扩展包
    2023-02-02
  • Python中关于 *args与**args的用法及说明
    Python中关于 *args与**args的用法及说明
    2023-02-02
  • Python中Dataframe数据排序方法(含实例讲解)
    Python中Dataframe数据排序方法(含实例讲解)
    2023-02-02
  • pandas中实现将相同ID的字符串进行合并
    pandas中实现将相同ID的字符串进行合并
    2023-02-02
  • pytest用例执行顺序和跳过执行详解
    pytest用例执行顺序和跳过执行详解
    2023-02-02
  • Python中mmap模块处理大文本的操作方法
    Python中mmap模块处理大文本的操作方法
    2023-02-02
  • pytest生成Allure报告以及查看报告的实现
    pytest生成Allure报告以及查看报告的实现
    2023-02-02
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2024 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号