Я хочу объединить несколько строк в фрейм данных на основе 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 и применить какую-то конкатенацию строк в столбце «текст». Любая помощь приветствуется!
python-3.x
pandas
pandas-groupby
Mattiasostmar
источник
источник
pandas < 1.0
,.drop_duplicates()
игнорирует индекс, который может дать неожиданные результаты. Вы можете избежать этого, используя.agg(lambda x: ','.join(x))
вместо.transform().drop_duplicates()
.drop_duplicates()
может не работать, если вы неdrop_duplicates(inplace=True)
df = df[['name','text','month']].drop_duplicates()
мы можем сгруппировать по столбцам «имя» и «месяц», а затем вызвать функции agg () объектов DataFrame Panda.
Функциональность агрегирования, предоставляемая функцией agg (), позволяет рассчитывать несколько статистических данных для каждой группы за один расчет.
df.groupby(['name', 'month'], as_index = False).agg({'text': ' '.join})
источник
Ответ EdChum предоставляет вам большую гибкость, но если вы просто хотите объединить строки в столбец объектов списка, вы также можете:
output_series = df.groupby(['name','month'])['text'].apply(list)
источник
Для меня вышеупомянутые решения были близки, но добавили некоторые нежелательные объекты / n и dtype:, поэтому вот модифицированная версия:
df.groupby(['name', 'month'])['text'].apply(lambda text: ''.join(text.to_string(index=False))).str.replace('(\\n)', '').reset_index()
источник