2015-05-19 3 views
0

У меня есть Python панда DataFrame:Python Панда сумма dataframe с одной колонкой

df = pd.DataFrame(np.random.rand(5,3),columns=list('ABC')) 
print df 
       A   B   C 
0 0.041761178 0.60439116 0.349372206 
1 0.820455992 0.245314299 0.635568504 
2 0.517482167 0.7257227 0.982969949 
3 0.208934899 0.594973111 0.671030326 
4 0.651299752 0.617672419 0.948121305 

Вопрос: Я хотел бы добавить первый столбец в целом dataframe. Я хотел бы получить это:

   A   B   C 
0 0.083522356 0.646152338 0.391133384 
1 1.640911984 1.065770291 1.456024496 
2 1.034964334 1.243204867 1.500452116 
3 0.417869798 0.80390801 0.879965225 
4 1.302599505 1.268972171 1.599421057 

В первом ряду:

  • A: 0,04176 + 0.04176 = 0,08352
  • B: 0,04176 + 0.60439 = 0,64615
  • т.д.

Требования: Я не могу ссылаться на первый столбец usi ng имя его столбца. например: df.A неприемлем; df.iloc[:,0] приемлемо.

Попытка: Я попытался это с помощью:

print df.add(df.iloc[:,0], fill_value=0) 

, но он не работает. Он возвращает сообщение об ошибке:

Traceback (most recent call last): 
    File "C:test.py", line 20, in <module> 
    print df.add(df.iloc[:,0], fill_value=0) 
    File "C:\python27\lib\site-packages\pandas\core\ops.py", line 771, in f 
    return self._combine_series(other, na_op, fill_value, axis, level) 
    File "C:\python27\lib\site-packages\pandas\core\frame.py", line 2939, in _combine_series 
    return self._combine_match_columns(other, func, level=level, fill_value=fill_value) 
    File "C:\python27\lib\site-packages\pandas\core\frame.py", line 2975, in _combine_match_columns 
    fill_value) 
NotImplementedError: fill_value 0 not supported 

Можно ли взять сумму всех столбцов DataFrame с первым столбцом?

ответ

3

Вот что вам нужно сделать:

df.add(df.A, axis=0) 


Example: 
>>> df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C']) 
>>> col_0 = df.columns.tolist()[0] 

>>> print df 
      A   B   C 
0 0.502962 0.093555 0.854267 
1 0.165805 0.263960 0.353374 
2 0.386777 0.143079 0.063389 
3 0.639575 0.269359 0.681811 
4 0.874487 0.992425 0.660696 
>>> df = df.add(df.col_0, axis=0) 
>>> print df 
      A   B   C 
0 1.005925 0.596517 1.357229 
1 0.331611 0.429766 0.519179 
2 0.773553 0.529855 0.450165 
3 1.279151 0.908934 1.321386 
4 1.748975 1.866912 1.535183 
>>> 
+0

Ваш ответ имеет правильный подход, но я не могу назвать столбцы по имени. –

+1

Я обновил ответ. Не забудьте утвердить ответ, если это то, что вам нужно. – Plug4

+0

Спасибо. Это сообщение разрешено. На все мои вопросы был дан ответ. –

1

Я хотел бы попробовать что-то вроде этого:

firstol = df.columns[0] 
df2 = df.add(df[firstcol], axis=0) 
0

Я использовал сочетание двух вышеуказанных должностей, чтобы ответить на этот вопрос.

Поскольку я не могу ссылаться на конкретный столбец по его названию, я не могу использовать df.add(df.A, axis=0). Но это верно. Так как df += df[firstcol] создал фрейм данных NaN s, я не мог использовать этот подход, но способ, которым это решение получает список столбцов из фреймворка данных, - это трюк, который мне нужен.

Вот как я это сделал:

col_0 = df.columns.tolist()[0] 
print(df.add(df[col_0], axis=0)) 
Смежные вопросы