Pandas: добавить строку вверху с указанием дня на основе даты в заголовках столбцов. - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть сводная таблица DataFrame с датами в качестве заголовков столбцов, как показано ниже:

Due Date    2020-01-1   2020-04-12  2020-04-22  2020-05-06  2020-05-1
Customer                                            
Aviva          0            0           0           0         1000  
Debenhams      0        75325           0           0           0   
H&M         1204            0           0           0           0

Я хотел бы добавить строку ниже заголовков, в которой день недели соответствует дате заголовка:

    Due Date    2020-01-1   2020-04-12  2020-04-22  2020-05-06  2020-05-1
    Day         Wednesday     Sunday    Wednesday    Wednesday    Friday
    Customer                                            
    Aviva          0            0           0           0         1000  
    Debenhams      0        75325           0           0           0   
    H&M         1204            0           0           0           0

Я получаю, что мне нужно вызвать метод day_name () для заголовков datetime, что я могу сделать, и я попытался перебрать столбцы и найти способ сделать это таким образом но безуспешно.

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

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 27 апреля 2020

Вы можете создать MultiIndex по второму уровню, созданному DatetimeIndex.day_name:

df.columns = [df.columns, pd.to_datetime(df.columns).day_name()]

print (df)
          2020-01-1 2020-04-12 2020-04-22 2020-05-06 2020-05-1
          Wednesday     Sunday  Wednesday  Wednesday    Friday
Due Date                                                      
Aviva             0          0          0          0      1000
Debenhams         0      75325          0          0         0
H&M            1204          0          0          0         0

Если хотите также задать имена столбцов, используйте MultiIndex.from_arrays:

df.columns = pd.MultiIndex.from_arrays([df.columns, 
                                        pd.to_datetime(df.columns).day_name()], 
                                        names=('Date','Day'))

print (df)
Date      2020-01-1 2020-04-12 2020-04-22 2020-05-06 2020-05-1
Day       Wednesday     Sunday  Wednesday  Wednesday    Friday
Due Date                                                      
Aviva             0          0          0          0      1000
Debenhams         0      75325          0          0         0
H&M            1204          0          0          0         0

РЕДАКТИРОВАТЬ:

Если возможно, некоторые значения, отличные от даты и времени в столбцах:

df['sum'] = df.sum(axis=1)
df.columns = [df.columns, pd.to_datetime(df.columns, errors='coerce').day_name().fillna('-')]

print (df)
          2020-01-1 2020-04-12 2020-04-22 2020-05-06 2020-05-1    sum
          Wednesday     Sunday  Wednesday  Wednesday    Friday      -
Due Date                                                             
Aviva             0          0          0          0      1000   1000
Debenhams         0      75325          0          0         0  75325
H&M            1204          0          0          0         0   1204
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...