Pandas DF: сумма строк чисел, приведенных в виде строк в новый столбец - PullRequest
0 голосов
/ 03 июля 2018

Хорошо, я в тупике и просмотрел все доступные страницы, следил за всем этим, и все еще тьфу! Так вот мой DF. Я хочу добавить все значения в строке 4 вместе и получить итоговую сумму в конце, а затем сделать это для 5, 6, 7 ... Я использую .concat() и .sum() и получаю ключевые ошибки или слишком много аргументов, пробовал .groupby и даже .add() (стоит попробовать), поскольку столбцы являются «списками», итоговые значения ничего не дают.

     1day     2day     3day     4day     5day     6day     7day
4   2.979    2.979    2.979    2.979    2.979    2.979    2.979
5   9.543    9.543    9.543    9.543    9.543    9.543    9.543
6   5.222    5.222    5.222    5.222    5.222    5.222    5.222
7   0.319    0.319    0.319    0.319    0.319    0.319    0.319
10 -4.491   -4.491   -4.491   -4.491   -4.491   -4.491   -4.491
14  2.178    2.178    2.178    2.178    2.178    2.178    2.178
15  7.507    7.507    7.507    7.507    7.507    7.507    7.507
16  0.612    0.612    0.612    0.612    0.612    0.612    0.612
17  4.488    4.488    4.488    4.488    4.488    4.488    4.488

Мне повезло с df.groupby(df.index)[['1day','2day'...'7day'].sum(), но он просто собирает их вместе, а не добавляет их. (Я знаю, что все значения равны) В Excel, sum (a1: g1), но в пандах, я просто пишу в более глубокую дыру, пожалуйста, помогите! снимок экрана df, может быть лучше

1 Ответ

0 голосов
/ 03 июля 2018

.sum() применяется к DF строк

Без изменения оригинальных вопросов и ответов ... Вот обновленный ответ на ваш исправленный вопрос:

Проблема в том, что вам нужно преобразовать строки в целые числа. Это просто делает его двухступенчатым процессом. Я покажу все шаги, чтобы было ясно:

In [83]: str_lst =[[ '7',  '3',  '2', '-1',  '5',  '8',  '0'],
                [ '6',  '8',  '4',  '0',  '8',  '7',  '6'],
                [ '6',  '1',  '2',  '8',  '6', '-1',  '2'],
                [ '0', '-1',  '3',  '5',  '1',  '3',  '7'],
                [ '6',  '5',  '2',  '8',  '4',  '2',  '3'],
                [ '4', '-1', '-1',  '3',  '2',  '3', '-1'],
                [ '8',  '6',  '6',  '0',  '8',  '0',  '0'],
                ['-1',  '3',  '3',  '0',  '4',  '2',  '4'],
                [ '2',  '1',  '2',  '7',  '0',  '8',  '5'],
                [ '3',  '8',  '1',  '0',  '8',  '1',  '8']]

In [85]: df = pd.DataFrame(str_lst, columns=['1day', '2day', 
                  '3day', '4day', '5day', '6day', '7day'])

In [93]: df = df.apply(pd.to_numeric)

In [94]: df['Totals'] = df.sum(axis =1)

Если вы сделаете сумму до pd.to_numeric, это будет суммирование строк. Если вы сделаете сумму после pd.to_numeric, это будет суммирование целых.

Оригинальный ответ

После того, как вы создали свой DF. Попробуйте:

df['Totals'] = df.sum(axis=1)

Это добавит столбец в дальнем правом углу с суммой строк.

Пример

In [63]: df = pd.DataFrame(np.random.randint(-1,9,size=(10, 7)),
             columns=['1day', '2day', '3day', '4day', 
                      '5day', '6day', '7day'])

In [64]: df
Out[64]: 
   1day  2day  3day  4day  5day  6day  7day
0     0     0     7    -1     2     2    -1
1     0     3     3     2    -1     3     6
2     0     8     0    -1     8    -1     1
3     3     8    -1     2     6     3     8
4     5     0     1     8     8    -1     3
5     7     8     1     4     8     1     8
6     5     7     5    -1     7    -1     1
7     6     3     2     2     8     1     5
8     3     7     3     3     3    -1     1
9     2    -1     8     1     1     0     5

In [65]: df['Totals'] = df.sum(axis=1)

In [66]: df
Out[66]: 
   1day  2day  3day  4day  5day  6day  7day  Totals
0     0     0     7    -1     2     2    -1       9
1     0     3     3     2    -1     3     6      16
2     0     8     0    -1     8    -1     1      15
3     3     8    -1     2     6     3     8      29
4     5     0     1     8     8    -1     3      24
5     7     8     1     4     8     1     8      37
6     5     7     5    -1     7    -1     1      23
7     6     3     2     2     8     1     5      27
8     3     7     3     3     3    -1     1      19
9     2    -1     8     1     1     0     5      16
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...