我想要合并几个字符串在一个数据的基础上,在Pandas的歌舞。
到目前为止,这是我的代码:
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“中应用某种类型的字符串连接。任何帮助都很感激!
发布于 2014-12-04 15:54:19
您可以按'name'
和'month'
列分组,然后调用transform
,它将返回与原始df对齐的数据,并应用lambda,其中我们对文本条目进行join
:
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
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
:
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
发布于 2019-12-11 10:48:40
我们可以使用“名称”和“月份”列,然后调用熊猫的DataFrame对象的函数。
agg()
函数提供的聚合功能允许在一次计算中计算每个组的多个统计信息。
df.groupby(['name', 'month'], as_index = False).agg({'text': ' '.join})
发布于 2017-08-28 19:18:24
EdChum的回答为您提供了很大的灵活性,但是如果您只想将字符串连接到列表对象的一列中,您还可以:
output_series = df.groupby(['name','month'])['text'].apply(list)
https://stackoverflow.com/questions/27298178
复制相似问题