首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Pandas groupby从多个行连接字符串

使用Pandas groupby从多个行连接字符串
EN

Stack Overflow用户
提问于 2014-12-04 15:48:35
回答 8查看 254.1K关注 0票数 200

我想要合并几个字符串在一个数据的基础上,在Pandas的歌舞。

到目前为止,这是我的代码:

代码语言:javascript
运行
复制
import pandas as pd
from io import StringIO

data = StringIO("""
"name1","hej","2014-11-01"
"name1","du","2014-11-02"
"name1","aj","2014-12-01"
"name1","oj","2014-12-02"
"name2","fin","2014-11-01"
"name2","katt","2014-11-02"
"name2","mycket","2014-12-01"
"name2","lite","2014-12-01"
""")

# load string as stream into dataframe
df = pd.read_csv(data,header=0, names=["name","text","date"],parse_dates=[2])

# add column with month
df["month"] = df["date"].apply(lambda x: x.month)

我希望最终结果是这样的:

我不明白如何使用groupby并在列"text“中应用某种类型的字符串连接。任何帮助都很感激!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-12-04 15:54:19

您可以按'name''month'列分组,然后调用transform,它将返回与原始df对齐的数据,并应用lambda,其中我们对文本条目进行join

代码语言:javascript
运行
复制
In [119]:

df['text'] = df[['name','text','month']].groupby(['name','month'])['text'].transform(lambda x: ','.join(x))
df[['name','text','month']].drop_duplicates()
Out[119]:
    name         text  month
0  name1       hej,du     11
2  name1        aj,oj     12
4  name2     fin,katt     11
6  name2  mycket,lite     12

我在这里传递感兴趣的df[['name','text','month']]列的列表,然后调用drop_duplicates,从而使原始df成为子元素。

编辑实际上我只需调用apply,然后调用reset_index

代码语言:javascript
运行
复制
In [124]:

df.groupby(['name','month'])['text'].apply(lambda x: ','.join(x)).reset_index()

Out[124]:
    name  month         text
0  name1     11       hej,du
1  name1     12        aj,oj
2  name2     11     fin,katt
3  name2     12  mycket,lite

更新

这里没有必要使用lambda

代码语言:javascript
运行
复制
In[38]:
df.groupby(['name','month'])['text'].apply(','.join).reset_index()

Out[38]: 
    name  month         text
0  name1     11           du
1  name1     12        aj,oj
2  name2     11     fin,katt
3  name2     12  mycket,lite
票数 300
EN

Stack Overflow用户

发布于 2019-12-11 10:48:40

我们可以使用“名称”和“月份”列,然后调用熊猫的DataFrame对象的函数。

agg()函数提供的聚合功能允许在一次计算中计算每个组的多个统计信息。

代码语言:javascript
运行
复制
df.groupby(['name', 'month'], as_index = False).agg({'text': ' '.join})

票数 115
EN

Stack Overflow用户

发布于 2017-08-28 19:18:24

EdChum的回答为您提供了很大的灵活性,但是如果您只想将字符串连接到列表对象的一列中,您还可以:

代码语言:javascript
运行
复制
output_series = df.groupby(['name','month'])['text'].apply(list)
票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27298178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档