将数据框与系列合并

Merging a dataframe with a Series

我的一个同事正在尝试组合矩阵和系列,并试图查看是否有原生 pandas 方法来代替循环。

示例,如果我有一个包含以下内容的数据框

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

有没有pandas实现这种效果的具体方法。我不确定具体要搜索什么来找到这个,并且在我的脑海中尝试了几次足够相似的东西都失败了。

您可以使用合并来完成此操作。如果你想要完整的笛卡尔积,你可以这样做:

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 中搜索 "Brief primer on merge methods (relational algebra)"。

有人发布了一个帮助我得到我想要的答案的答案,但在我回来接受之前删除了它。

基本上我需要做的是使系列成为一个数据框并向两者添加一个公共列,假设它们被称为 a 和 b 我只是

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]: