Pandas 如何将相同ID的字符串进行合并

in PandasPython with 0 comment

下面的解决方案中是我在github中找到的,直接使用的解法二apply函数,但出现了报错,下面是解决方案。

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
"""
#解法一:可以用sum方法,将字符串进行连接
#① 我们可以先将原始数据的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 = data.groupby(by='id').apply(lambda x:[','.join(x['value'])])
"""
就得到了最终的结果:
id  value
1   [A,B,C]
2   [D,E,F]
"""

报错信息

  """
  python "".join() 出错TypeError: sequence item 0: expected string, int found
  """

python中使用join连接list时出现类型错误的解决办法

例:

>>> ls = [1,2,3]
>>> print ','.join(ls)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
 
解决办法对list中的元素进行类型转换到string
 
>>> print ','.join('%s' % id for id in ls)
1,2,3

将解法二 .join函数里面的列表迭代出来:

df_isnull_have_keywords = df_isnull_have_keywords.groupby(by='Request TT').apply(lambda x: [','.join('%s' % key for key in x['Keywords'])])

解决了

Responses