如何将系列加入数据框?

Posted

技术标签:

【中文标题】如何将系列加入数据框?【英文标题】:How to join a Series to a DataFrame? 【发布时间】:2015-11-26 22:10:10 【问题描述】:

有什么方法可以直接将 Series 加入 DataFrame?

连接将位于数据框的字段和系列的索引上。

我发现的唯一方法是先将系列转换为数据框,如下面的代码所示。

import numpy as np
import pandas as pd

df = pd.DataFrame()
df['a'] = np.arange(0, 4)
df['b'] = np.arange(100, 104)


s = pd.Series(data=np.arange(100, 103))

# this doesn't work
# myjoin = pd.merge(df, s, how='left', left_on='a', right_index=True)

# this does
s = s.reset_index()
# s becomes a Dataframe
# note you cannot reset the index of a series inplace
myjoin = pd.merge(df, s, how='left', left_on='a', right_on='index')

print myjoin

【问题讨论】:

抱歉,您只是要求添加一个新列,例如:df['new_col'] = df['a'].map(s)? 我相信您问题中的解决方案(使s 成为带有reset_index() 的数据框)是正确的解决方案。 我想将Series中的列添加到数据框中,但是如何指定它应该是左外连接还是内连接,以及如何指定数据框的哪一列该系列的索引应该匹配吗?谢谢 在您的情况下,您应该使用 pd.join 而不是 pd.merge。文档说得很清楚:pandas.pydata.org/pandasdocs/stable/generated/… 但是你应该在组合两个之前定义系列的名称。 【参考方案1】:

试试 concat():

import numpy as np
import pandas as pd

df= pd.DataFrame()
df['a']= np.arange(0,4)
df['b']= np.arange(100,104)

s =pd.Series(data = np.arange(100,103))

new_df = pd.concat((df, s), axis=1)
print new_df

打印出来:

   a    b    0
0  0  100  100
1  1  101  101
2  2  102  102
3  3  103  NaN

【讨论】:

【参考方案2】:

我猜http://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html 可能会有所帮助。

例如内/外连接。

pd.concat((df,s), axis=1)
Out[26]: 
   a    b    0
0  0  100  100
1  1  101  101
2  2  102  102
3  3  103  NaN

In [27]: pd.concat((df,s), axis=1, join='inner')
Out[27]: 
   a    b    0
0  0  100  100
1  1  101  101
2  2  102  102

【讨论】:

这是否加入索引?就我而言,索引不同,我想指定要加入的字段,但 concat 似乎没有像 pd.merge 这样的 on、left_on、right_on 参数 是的,它加入索引。只解决这部分>>我想将Series中的列添加到数据框中,但是如何指定它应该是左外连接还是内连接 mmm,那么使用 reset_index 从系列转换为数据帧的唯一方法是什么?这会将索引转换为列,该列将添加到合并函数的结果中。因此,我需要将其删除。这一切似乎都是不必要的复杂! 真的不知道,也许还有其他方法,但我不知道也找不到。【参考方案3】:

这是一个非常晚的答案,但对我有用的是构建一个数据框,其中包含您要在系列中检索的列,将此系列命名为您需要的索引, 将系列附加到数据框(如果您在系列中有补充元素,则将它们添加到数据框,这在某些应用程序中可能很方便),然后通过此索引将最终数据框连接到要扩展的原始数据框。同意这不是直接的,但如果你有很多系列,这仍然是最方便的方法,而不是先在数据框中转换每个。

【讨论】:

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

加入/合并两个 Pandas 数据框并将列用作多索引

如何合并多维数据框和不同长度的系列?

在 Python 中按共同日期加入时间序列(数据框和系列/列表问题)

如何将 Pandas 数据框/系列数据保存为图形?

如何将数据框变成一系列列表?

如何将熊猫单列数据框转换为系列或numpy向量[重复]