Python Pandas - Вывести общую сумму столбца, который либо имеет значение '1', либо NaN - PullRequest
0 голосов
/ 07 мая 2020

У меня есть фрейм данных, который выглядит следующим образом

Opened              Closed              Resolved                   07:01 - 09:00    09:01 - 11:00   11:01 - 13:00   
2020-04-14 14:45:58 2020-04-14 15:04:22 0 days 00:18:24.000000000                                   1   
2020-04-14 13:43:28 2020-04-14 14:12:22 0 days 00:28:54.000000000                   1   
2020-04-14 13:41:18 2020-04-14 14:12:28 0 days 00:31:10.000000000                   1   
2020-04-14 10:57:53 2020-04-14 11:24:58 0 days 00:27:05.000000000       1           
2020-04-14 09:18:14 2020-04-14 09:44:04 0 days 00:25:50.000000000       1           
2020-04-14 09:16:28 2020-04-14 09:31:12 0 days 00:14:44.000000000       1           
2020-04-13 22:56:09 2020-04-14 00:39:30 0 days 01:43:21.000000000                   
2020-04-13 20:10:31 2020-04-13 20:26:25 0 days 00:15:54.000000000                   
2020-04-13 08:29:38 2020-04-13 18:29:25 0 days 09:59:47.000000000       1               
2020-04-09 14:04:14 2020-04-09 15:31:01 0 days 01:26:47.000000000                   1   
2020-04-09 10:06:24 2020-04-09 10:33:39 0 days 00:27:15.000000000       1           
2020-04-08 21:38:13 2020-04-09 07:01:30 0 days 09:23:17.000000000                   
2020-04-08 15:51:41 2020-04-08 16:08:02 0 days 00:16:21.000000000                                   1
2020-04-08 15:50:09 2020-04-08 16:07:57 0 days 00:17:48.000000000                                   1
2020-04-08 15:48:38 2020-04-08 16:07:52 0 days 00:19:14.000000000                                   1

Я хочу создать сумму всех значений «1» внизу каждого столбца, чтобы он выглядел примерно так.

Opened              Closed              Resolved                   07:01 - 09:00    09:01 - 11:00   11:01 - 13:00   
2020-04-14 14:45:58 2020-04-14 15:04:22 0 days 00:18:24.000000000                                   1   
2020-04-14 13:43:28 2020-04-14 14:12:22 0 days 00:28:54.000000000                   1   
2020-04-14 13:41:18 2020-04-14 14:12:28 0 days 00:31:10.000000000                   1   
2020-04-14 10:57:53 2020-04-14 11:24:58 0 days 00:27:05.000000000       1           
2020-04-14 09:18:14 2020-04-14 09:44:04 0 days 00:25:50.000000000       1           
2020-04-14 09:16:28 2020-04-14 09:31:12 0 days 00:14:44.000000000       1           
2020-04-13 22:56:09 2020-04-14 00:39:30 0 days 01:43:21.000000000                   
2020-04-13 20:10:31 2020-04-13 20:26:25 0 days 00:15:54.000000000                   
2020-04-13 08:29:38 2020-04-13 18:29:25 0 days 09:59:47.000000000       1               
2020-04-09 14:04:14 2020-04-09 15:31:01 0 days 01:26:47.000000000                   1   
2020-04-09 10:06:24 2020-04-09 10:33:39 0 days 00:27:15.000000000       1           
2020-04-08 21:38:13 2020-04-09 07:01:30 0 days 09:23:17.000000000                   
2020-04-08 15:51:41 2020-04-08 16:08:02 0 days 00:16:21.000000000                                   1
2020-04-08 15:50:09 2020-04-08 16:07:57 0 days 00:17:48.000000000                                   1
2020-04-08 15:48:38 2020-04-08 16:07:52 0 days 00:19:14.000000000                                   1

Total                                                                   5           3               4                 
12


Таким образом, каждый столбец сам суммируется, а затем все столбцы также имеют итог.

Я пробовал

data.groupby('Total')["07:01 - 09:00"].sum()[1]

Но это выводит длинная строка из «1» 11111111111

Как мне получить результат?

1 Ответ

1 голос
/ 07 мая 2020

В приведенном вами примере, вероятно, ваши три (3) столбца с именами («07:01 - 09:00, 09:01 - 11:00, 11:01 - 13:00») имеют тип dtype: str, это причина, по которой вы получаете длинную строку из единиц. Сказал, что вы должны преобразовать свои столбцы в плавание следующим образом:

data['07:01 - 09:00'] = data['07:01 - 09:00'].astype(float)
data['09:01 - 11:00'] = data['09:01 - 11:00'].astype(float)
data['11:01 - 13:00'] = data['11:01 - 13:00'].astype(float)

После этого вы можете попробовать следующее:

data = data.append(data[['07:01 - 09:00', '09:01 - 11:00', '11:01 - 13:00']].sum(), 
                   ignore_index=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...