Как установить столбец в качестве индекса в DataFrame - PullRequest
0 голосов
/ 02 января 2019

Приведенный ниже мой текущий DataFrame панд:

         Balance before Salary   Salary
Month                                 
Jun-18                  27.20  15300.0
Jul-18                  88.20  15300.0
Aug-18                 176.48  14783.0
Sep-18                  48.48  16249.0
Oct-18                 241.48  14448.0
Nov-18                  49.48  15663.0

возможно ли преобразовать вышеуказанный DataFrame в следующий формат?

                        Month1  Month2  Month3  Month4  Month5  Month6
Balance before Salary   27.2    88.2    176.48  48.48   241.48  49.48
Salary                 15300    15300   14783   16249   14448   15663

код

df = pd.DataFrame(salary_List)
newdf = df.groupby('date').sum()
newdf = df.groupby(pd.Grouper(key='date', freq='1M')).sum()
newdf.index = newdf.index.strftime('%b-%y')
newdf.index.name = 'Month'

Может кто-нибудь помочь мне в этом?

Ответы [ 3 ]

0 голосов
/ 02 января 2019

То, что вы хотите сделать, называется «транспонирование».Вы можете получить транспонированный кадр данных, вызвав функцию df.transpose().Так что для вас просто:

df = pd.DataFrame(salary_List)
newdf = df.transpose()

Затем с помощью простого цикла вы можете изменить имена столбцов на те, которые вы хотите.

0 голосов
/ 02 января 2019

Вы также можете получить месяц и год (для большей ясности) и затем транспонировать:

сброс индекса для получения Месяца в виде столбца:

df1 = df1.rename_axis('Month').reset_index()
df1.drop([0],inplace=True)

Тогда:

df['Month'] = df['Month'].apply( lambda x : pd.to_datetime(x).strftime('%b %Y')) # gets name of month and year
df_new = df1.T #transpose and save to new df
df_new.columns = df_new.iloc[0] # set columnnames as monthnames
df_new.drop('Month',inplace=True) # drop the extra row Month

Выход:

enter image description here

0 голосов
/ 02 января 2019

Я думаю, вам нужно transpose от T, а затем, если необходимо, изменить имена столбцов, добавить понимание списка:

Примечание:
Двойной groupby+sum не требуется, достаточно одного раза, потому что здесь агрегируется та же самая агрегатная функция, здесь sum.

df = pd.DataFrame(salary_List)

newdf = df.groupby(pd.Grouper(key='date', freq='1M')).sum().T
#python 3.6+
newdf.columns = [f'Month{x}' for x in range(1, len(newdf.columns) + 1)]

#python bellow
#newdf.columns = ['Month{}'.format(x) for x in range(1, len(newdf.columns) + 1)]
print (newdf)
                        Month1   Month2    Month3    Month4    Month5  \
Balance before Salary     27.2     88.2    176.48     48.48    241.48   
Salary                 15300.0  15300.0  14783.00  16249.00  14448.00   

                         Month6  
Balance before Salary     49.48  
Salary                 15663.00  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...