根据其他数据框向熊猫数据框添加新列

Posted

技术标签:

【中文标题】根据其他数据框向熊猫数据框添加新列【英文标题】:Add new columns to pandas dataframe based on other dataframe 【发布时间】:2017-01-14 12:24:55 【问题描述】:

我正在尝试在 pandas 数据框中设置一个新列(实际上是两列),数据来自其他数据框。

我有以下两个数据框(它们是为此目的的示例,原始数据框要大得多):

In [116]: df0
Out[116]:     
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4
3  5  5  5


In [118]: df1
Out[118]: 
   A  D  E
0  2  7  2
1  6  5  5
2  4  3  2
3  0  1  0
4  5  4  6
5  0  1  0

我想有一个新的数据框(或添加到 df0,无论如何),如:

df2: 
   A  B  C  D  E
0  0  1  0  1  0
1  2  3  2  7  2
2  4  5  4  3  2
3  5  5  5  4  6

如您所见,结果数据框中不存在 A=6 的行,该行存在于 df1 但不存在于 df0 中。此外,A=0 的行在 df1 中重复,但在结果 df2 中没有。

实际上,我在选择方法上遇到了问题。我可以这样做:

df1.loc[df1['A'].isin(df0['A'])]

但我不确定如何应用唯一数据的保留部分(请记住,df1 可以包含重复数据)并将两列添加到 df2 数据集(或将它们添加到 df0)。 我在这里搜索过,但不知道如何应用 groupby 甚至 map 之类的东西。

有什么想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

这是merge(docs)的基本应用:

import pandas as pd
df2 = pd.merge(df0,df1, left_index=True, right_index=True)

【讨论】:

我猜应该是:pd.merge(df0, df1, on=['A']) 一开始我尝试了你的解决方案,后来由于性能提升我转而加入【参考方案2】:

试试这个 new_data=df0.set_index('A').join(df1.set_index('A')) 您可能会收到索引错误,然后您必须设置为不相等。两个数据框中的索引

【讨论】:

以上是关于根据其他数据框向熊猫数据框添加新列的主要内容,如果未能解决你的问题,请参考以下文章

我们可以从另一个数据框向数据框添加新列吗

根据其他列向 Panda 数据框添加新列

如何在遍历熊猫数据框时创建新列并插入行值

熊猫根据其他列的值移动到对应列

拆分熊猫列并将最后一个元素添加到新列

在熊猫数据框中添加指示计数的新列