按名称分组后连接字符串,然后按日期排序
Concatenating strings after grouping by name and then sorting by date
我在数据框中有这个数据
data = [
{'name' : 'a', 'date' : '2020-01-02', 'message' : 'there'},
{'name' : 'b', 'date' : '2020-01-01', 'message' : 'Hello'},
{'name' : 'a', 'date' : '2020-01-01', 'message' : 'Hi'},
{'name' : 'b', 'date' : '2020-01-03', 'message' : 'everyone'},
{'name' : 'c', 'date' : '2020-01-05', 'message' : 'Test'}
]
我想做的是按名字分组,然后按日期排序,然后连接每个名字的消息,这样数据看起来像这样
[
{'name' : 'a', 'message' : 'Hi there'},
{'name' : 'b', 'message' : 'Hello everyone'},
{'name' : 'c', '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
这会在组内进行直接串联,然后去除生成的字符串。
我在数据框中有这个数据
data = [
{'name' : 'a', 'date' : '2020-01-02', 'message' : 'there'},
{'name' : 'b', 'date' : '2020-01-01', 'message' : 'Hello'},
{'name' : 'a', 'date' : '2020-01-01', 'message' : 'Hi'},
{'name' : 'b', 'date' : '2020-01-03', 'message' : 'everyone'},
{'name' : 'c', 'date' : '2020-01-05', 'message' : 'Test'}
]
我想做的是按名字分组,然后按日期排序,然后连接每个名字的消息,这样数据看起来像这样
[
{'name' : 'a', 'message' : 'Hi there'},
{'name' : 'b', 'message' : 'Hello everyone'},
{'name' : 'c', '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
这会在组内进行直接串联,然后去除生成的字符串。