我想合并几个字符串在一个数据框架基于groupedby在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,并在“文本”列中应用字符串的某种连接。感谢任何帮助!


当前回答

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

output_series = df.groupby(['name','month'])['text'].apply(list)

其他回答

对我来说,上面的解决方案很接近,但添加了一些不需要的/n和dtype:object,所以这里是一个修改版本:

df.groupby(['name', 'month'])['text'].apply(lambda text: ''.join(text.to_string(index=False))).str.replace('(\\n)', '').reset_index()

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

output_series = df.groupby(['name','month'])['text'].apply(list)

如果你想在一个列表中连接你的“文本”:

df.groupby(['name', 'month'], as_index = False).agg({'text': list})

请试试这行代码:-

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

我们可以根据“name”和“month”列进行分组,然后调用Panda的DataFrame对象的agg()函数。

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

df.groupby(['name', 'month'], as_index = False).agg({'text': ' '.join})