将数据框与系列合并

Posted

技术标签:

【中文标题】将数据框与系列合并【英文标题】:Merging a dataframe with a Series 【发布时间】:2015-08-16 07:33:54 【问题描述】:

我的一位同事正在尝试将矩阵和系列结合起来,并试图查看是否有原生 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特有的方法可以实现这个效果。我不确定具体要搜索什么来找到它,并且在我的脑海中尝试了几次足够相似的尝试都失败了。

【问题讨论】:

可能与:***.com/questions/13269890/… 我们可以假设Series和DataFrame使用相同的索引值吗? 【参考方案1】:

您可以通过合并来做到这一点。如果您想要完整的笛卡尔积,您可以执行以下操作:

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 中搜索“合并方法的简要入门(关系代数)”,则会获得更多信息。

【讨论】:

【参考方案2】:

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

基本上,我需要做的是将 Series 设为数据框,并为两者添加一个公共列,假设这些列被称为 a 和 b i just

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

【讨论】:

以上是关于将数据框与系列合并的主要内容,如果未能解决你的问题,请参考以下文章

将大型 Dask 数据框与小型 Pandas 数据框合并

Pandas 将数据框与共享列合并,左右填充

pandas 将数据框与 NaN(或“未知”)合并以查找缺失值

将数据框与其他数据框合并并根据特定条件计算分组百分比

将两个数据框与一些公共列合并,其中公共的组合需要是自定义函数

当两个数据框都包含重复键时,如何将两个熊猫数据框与左连接合并?