2013-02-19 2 views
4

Скажем, у меня есть dataframe:операции столбцов в панд

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde')) 

Я хотел бы вычитать записи в столбце df.a от всех остальных столбцов. Другими словами, я хотел бы получить dataframe, который содержит в качестве столбцов следующие столбцы:

| col_b - col_a | col_c - col_a | col_d - col_a |

Я попытался df - df.a, но это дает что-то странное:

0 1 2 3 a b c d e 
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN 
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN 
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN 
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN 

Как я могу сделать этот тип столбцов операций в панде? Кроме того, просто интересно, что делает df -df.a?

ответ

6

Вы, вероятно, хотите

>>> df.sub(df.a, axis=0) 
    a   b   c   d   e 
0 0 0.112285 0.267105 0.365407 -0.159907 
1 0 0.380421 0.119536 0.356203 0.096637 
2 0 -0.100310 -0.180927 0.112677 0.260202 
3 0 0.653642 0.566408 0.086720 0.256536 

df-df.a в основном пытаются сделать вычитание вдоль другой оси, так что индексы не совпадают, а при использовании бинарных операторов, таких как вычитание «несоответствующие индексы будут unioned вместе» (как говорят документы). Поскольку показатели не совпадают, вы заканчиваете 0 1 2 3 a b c d e.

Например, вы могли бы получить в том же направлении более косвенно инкорпорирующих вещи, (df.T - df.a).T, что листать df означает, что ось по умолчанию теперь правильный.

Смежные вопросы