#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)
добавьте переиндексацию в конце, это гарантирует, что у вас будет тот же порядок столбцов, что и в исходном df4. @user32185 что ты имеешь в виду?
5. @Wen-Ben спасибо! отлично работает, я только что добавил » n», и это отлично работает.