2015-06-02 3 views
0

Мой коллега пытается объединить матрицу и серию и пытается выяснить, есть ли способ нативных панд, чтобы сделать это вместо использования цикла.Слияние данных с серией

Пример, если у меня был dataframe, который состоял из

1, 2, 3 
4, 5, 6 
7, 8, 9 

и серии со значениями

13, 14, 15 

Тогда искомый результат будет

1, 2, 3, 13 
1, 2, 3, 14 
1, 2, 3, 15 
4, 5, 6, 13 
4, 5, 6, 14 
4, 5, 6, 15 
7, 8, 9, 13 
7, 8, 9, 14 
7, 8, 9, 15 

Есть ли панды конкретные метод достижения этого эффекта. Я не уверен, что конкретно искать, чтобы найти это, и несколько попыток того, что было достаточно похоже в моей голове, не удалось.

+0

возможно, связано с: http://stackoverflow.com/questions/13269890/cartesian-product-in-pandas – cel

+0

Можно ли предположить, что в Series и DataFrame используются те же значения индекса? – holdenweb

ответ

2

Вы можете сделать это с помощью слияния. Если вы хотите полное декартово произведение, вы можете сделать следующее:

import pandas as pd 
df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]]) 
df['key'] = 0 
ser = pd.DataFrame({'data': [13,14,15], 'key': [0] * 3}) 

result = pd.merge(df, ser, on = 'key').drop('key', axis = 1) 

Я проверил результат, и это выглядит как то, что вы хотите. Дополнительная информация, если вы ищете «Краткое руководство по методам слияния (реляционная алгебра)» в pandas docs.

0

Кто-то отправил ответ, который помог мне получить то, что я хотел, но затем удалил его, прежде чем я смог вернуться, чтобы согласиться.

В основном то, что мне нужно сделать, это сделать серию с dataframe и добавить общий столбец как условии, что эти называются и би только

In [1]: import pandas as pd 

In [2]: a = pd.DataFrame({1:[1,4,7],2:[2,5,8],3:[3,6,9]}) 

In [3]: a 
Out[3]: 
    1 2 3 
0 1 2 3 
1 4 5 6 
2 7 8 9 


In [5]: b = pd.DataFrame({4:[13,14,15]}) 

In [6]: b 
Out[6]: 
    4 
0 13 
1 14 
2 15 

In [7]: a["key"] = 1 

In [8]: b["key"] = 1 

In [9]: c = a.merge(b, on="key") 

In [10]: c 
Out[10]: 
    1 2 3 key 4 
0 1 2 3 1 13 
1 1 2 3 1 14 
2 1 2 3 1 15 
3 4 5 6 1 13 
4 4 5 6 1 14 
5 4 5 6 1 15 
6 7 8 9 1 13 
7 7 8 9 1 14 
8 7 8 9 1 15 

In [11]: del c["key"] 

In [12]: c 
Out[12]: 
    1 2 3 4 
0 1 2 3 13 
1 1 2 3 14 
2 1 2 3 15 
3 4 5 6 13 
4 4 5 6 14 
5 4 5 6 15 
6 7 8 9 13 
7 7 8 9 14 
8 7 8 9 15 

In [13]: 
Смежные вопросы