微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按名称分组然后按日期排序后连接字符串

如何解决按名称分组然后按日期排序后连接字符串

我在数据框中有这些数据


data = [
           {'name' : 'a','date' : '2020-01-02','message' : 'there'},{'name' : 'b','date' : '2020-01-01','message' : 'Hello'},{'name' : 'a','message' : 'Hi'},'date' : '2020-01-03','message' : 'everyone'},{'name' : 'c','date' : '2020-01-05','message' : 'Test'}
       ]

我想做的是按名称分组,然后按日期排序,并将每个名称的消息连接起来,使数据看起来像这样

[
   {'name' : 'a','message' : 'Hi there'},'message' : 'Hello everyone'},'message' : 'Test'}
]

我已经能够使用这个按名称分组并按日期排序(在将字符串转换为日期时间对象之后)

df.groupby(['name']).apply(lambda x: x.sort_values(['date'])

但我不确定在对数据进行分组和排序后如何将字符串连接在一起。

解决方法

apply试试join

df.sort_values('date').groupby('name')['message'].apply(' '.join).reset_index()

  name         message
0    a        Hi there
1    b  Hello everyone
2    c            Test
,

或者,为了避免 apply 调用:

>>> df.sort_values(['name','date'],inplace=True)
>>> df

  name        date   message
2    a  2020-01-01        Hi
0    a  2020-01-02     there
1    b  2020-01-01     Hello
3    b  2020-01-03  everyone
4    c  2020-01-05      Test

>>> df['message'] = df['message'] + ' '
>>> df
 
  name        date    message
2    a  2020-01-01        Hi 
0    a  2020-01-02     there 
1    b  2020-01-01     Hello 
3    b  2020-01-03  everyone 
4    c  2020-01-05      Test 

>>> df.groupby('name')['message'].sum().str.strip()

name
a          Hi there
b    Hello everyone
c              Test
Name: message,dtype: object

这会在组内进行直接连接,然后去除结果字符串。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。