Как мне использовать pivot / groupby для одного столбца и объединить другие?

#python #pandas #dataframe #pivot

#python #pandas #dataframe #сводная

Вопрос:

Я хотел бы составить сводную таблицу на основе одного столбца (месяца) и объединить другие столбцы. Ключ здесь в том, что я не буду знать ожидаемые имена столбцов (Month и Calculated), поэтому имена столбцов info1 и info2 могут измениться, поэтому я не могу их жестко закодировать, но я могу жестко закодировать Month и Calculated. ввод — это : ввод

Я уже пробовал сводные таблицы, но они отображают не все столбцы и делают не то, что мне нужно.

 import pandas as pd
from collections import OrderedDict

d = {'Month': [1, 2, 2],
     'Calculated': [300, 400, 460],
     'info1': ["my info", "i really need the tech", "some more info"], 
     'info2': ["sales are good", "lets do more tech", "my third line"]}

df = pd.DataFrame(data=d)

df.to_csv("myfile.csv")


df1 = df.pivot_table(index = ['Month'], aggfunc=lambda x: ' '.join(x)).reset_index()

df1.to_csv("myfile1.csv")
  

Я ожидал, что все столбцы будут там, сгруппированы по месяцам и объединят другие столбцы. Ожидаемый результат ожидаемый результат

Пожалуйста, не беспокойтесь о части csv, я сделал это, чтобы сделать снимок экрана для этого вопроса.

Решение:

 df.astype(str).pivot_table(index = ['Month'], aggfunc=lambda x: 'n'.join(x)).reset_index().reindex(columns=df.columns)
  

Ответ №1:

Сначала вам нужно изменить тип данных, используя astype(str)

 df.astype(str).pivot_table(index = ['Month'], aggfunc=lambda x: 'n'.join(x)).reset_index()
  

Комментарии:

1. Это не дает ожидаемого результата

2. Большое спасибо! это помогает. Один быстрый последующий вопрос, он изменил порядок столбцов. Что я могу сделать, если я хочу, чтобы месяц и вычисленный отображались первыми. (Он отправил вычисленное до самого конца)

3. @shaucha df.astype(str).pivot_table(index = ['Month'], aggfunc=lambda x: ' '.join(x)).reset_index().reindex(columns=df.columns) добавьте переиндексацию в конце, это гарантирует, что у вас будет тот же порядок столбцов, что и в исходном df

4. @user32185 что ты имеешь в виду?

5. @Wen-Ben спасибо! отлично работает, я только что добавил » n», и это отлично работает.