2013-12-16 4 views
21

Это, вероятно, легко, но у меня есть следующие данные:Append колонка панд dataframe

В кадр данных 1:

index dat1 
0  9 
1  5 

В кадр данных 2:

index dat2 
0  7 
1  6 

Я хочу кадр данных в следующем виде:

index dat1 dat2 
0  9  7 
1  5  6 

Я пробовал использовать метод append, но я получаю крест-соединение (т. декартовой продукции).

Каков правильный способ сделать это?

+2

ли вы попробовать 'join' метод? – BrenBarn

+0

data_frame_1 ['dat2'] = data_frame_2 ['dat2'] – lowtech

+0

@lowtech: это гарантирует, что индексы парятся правильно? – BenDundee

ответ

37

Кажется, в общем, вы просто ищете присоединиться:

> dat1 = pd.DataFrame({'dat1': [9,5]}) 
> dat2 = pd.DataFrame({'dat2': [7,6]}) 
> dat1.join(dat2) 
    dat1 dat2 
0  9  7 
1  5  6 
+3

Или 'pd.concat ([dat1, dat2], axis = 1)' в этом случае. – DSM

+0

Это «правильный» способ сделать это, поэтому круг получает квадрат! – BenDundee

+0

@BenDundee Join и concat используют много одного и того же кода под капотом, поэтому «правильный» способ, вероятно, имеет значение только при рассмотрении случаев кросс. Например, если оба DataFrames имеют столбец «data», объединение будет * fail *, тогда как concat даст вам два столбца с именем «data». – U2EF1

1

Просто вопрос правильного поиска Google:

data = dat_1.append(dat_2) 
data = data.groupby(data.index).sum() 
+11

Эта страница появилась в результате поиска Google. – denson

13

Вы также можете использовать:

dat1 = pd.concat([dat1, dat2], axis=1) 
5

Оба метода join() и concat() могут решить проблему. Тем не менее, есть одно предупреждение, которое я должен упомянуть: Сбросьте индекс перед тем, как вы присоединитесь или concat, если вы пытаетесь разобраться с некоторым фреймом данных, выбирая некоторые строки из другого DataFrame.

Один пример ниже показывает некоторые интересные поведение присоединиться и CONCAT:

dat1 = pd.DataFrame({'dat1': range(4)}) 
dat2 = pd.DataFrame({'dat2': range(4,8)}) 
dat1.index = [1,3,5,7] 
dat2.index = [2,4,6,8] 

# way1 join 2 DataFrames 
print(dat1.join(dat2)) 
# output 
    dat1 dat2 
1  0 NaN 
3  1 NaN 
5  2 NaN 
7  3 NaN 

# way2 concat 2 DataFrames 
print(pd.concat([dat1,dat2],axis=1)) 
#output 
    dat1 dat2 
1 0.0 NaN 
2 NaN 4.0 
3 1.0 NaN 
4 NaN 5.0 
5 2.0 NaN 
6 NaN 6.0 
7 3.0 NaN 
8 NaN 7.0 

#reset index 
dat1 = dat1.reset_index(drop=True) 
dat2 = dat2.reset_index(drop=True) 
#both 2 ways to get the same result 

print(dat1.join(dat2)) 
    dat1 dat2 
0  0  4 
1  1  5 
2  2  6 
3  3  7 


print(pd.concat([dat1,dat2],axis=1)) 
    dat1 dat2 
0  0  4 
1  1  5 
2  2  6 
3  3  7 
+0

Хорошо сказано и хорошо. Я пробовал без сброса индекса и сгенерировал много NULLS – Anand

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