Python 熊猫将一个数据帧与另一个具有不同形状的数据帧的差异相结合

Python 熊猫将一个数据帧与另一个具有不同形状的数据帧的差异相结合,python,pandas,Python,Pandas,我试图结合这两个数据帧DF1和DF2,但仅限于不在第一个数据帧DF1中的记录。在下面的示例中,我希望结果仅拾取记录0,1,4,5,而不是合并2,3,因为它们在DF1中已经具有复杂的单元外观。 我试着在没有运气和np的情况下合并 np.wheredf1[[“复合物”,“单位]]!=df2[['复合物','单位]] 这导致ValueError:只能比较标记相同的数据帧对象 DF1 DF2 期望结果 编辑::Append方法工作得很好,谢谢 df1=df1.appenddf2[-df2['unit\u

我试图结合这两个数据帧DF1和DF2,但仅限于不在第一个数据帧DF1中的记录。在下面的示例中,我希望结果仅拾取记录0,1,4,5,而不是合并2,3,因为它们在DF1中已经具有复杂的单元外观。 我试着在没有运气和np的情况下合并

np.wheredf1[[“复合物”,“单位]]!=df2[['复合物','单位]] 这导致ValueError:只能比较标记相同的数据帧对象

DF1

DF2

期望结果

编辑::Append方法工作得很好,谢谢

df1=df1.appenddf2[-df2['unit\u id'].isindf1['unit\u id'].unique],ignore\u index=True

上面是我在添加unit_id唯一标识符后使用的最终解决方案。没有这一点,一个聪明的解决方案被建议从2个半唯一字段中创建一个键

最新答案

您仍然可以将append与条件一起使用,但只需要创建一个额外的键列:

先前的答复

我认为您可以使用带条件的append来执行您想要的操作:

df1 = df1.append(df2[-df2['complex'].isin(df1['complex'].unique())],ignore_index=True)

这将使额外的列company、location、datetime等保留np.NaN值。稍后,您可以使用所需的结果填充公司列

Close,但我需要检查两列“复杂”和“单位”,这两列中可能都出现复杂,但DF1中缺少一个单位,该单位包含在DF2中。我更新了数据示例来说明这一点。更新了我的答案以反映这一要求。有些奇怪的事情正在发生。我采纳了关键理念,从数据库中引入了一个独特的单元ID,以简化工作。df1=df1.appenddf2[-df2['unit\u id'].isindf1['unit\u id'].unique],ignore\u index=True GAH将更新原始问题这太有限更新原始问题,无法清楚显示数据返回问题。pd.concat,drop\u由complex和unit复制,也在df2索引5中,它应该包含在新的DF中吗?很好,我更新了期望的结果以适应它。我不确定由complex和unit复制的pd.concat、drop_如何工作,因为一个unit/complex对可能有多个记录
index   complex   unit
0        7         1807
1        4         7
2        6         10
3        6         A
4       10         110A
5        6         12
company complex unit location   datetime            serial     seq    interval 
3        6       10  UpMaster     2017-07-21 00:33:37  1505.0  3400.0      1554
4        6       11  UpMaster     2017-07-21 00:59:44  1505.0  3401.0      1567
5        6       10  Down         2017-07-21 01:25:41  1505.0  3402.0      1557
6        6       A   UpMaster     2017-07-21 01:51:45  1505.0  3403.0      1564
7        6       13  UpMaster     2017-07-21 02:17:48  1505.0  3404.0      1563
8        7       1807  NaN       NaN                   NaN     NaN         Nan
9        4       7     NaN       NaN                   NaN     NaN         Nan
10       10      110A  NaN       NaN                   NaN     NaN         Nan
11       6       12    NaN       NaN                   NaN     NaN         Nan
df1['key'] = df1['complex'].astype(str) + ' ' + df1['unit'].astype(str)
df2['key'] = df2['complex'].astype(str) + ' ' + df2['unit'].astype(str)
df1 = df1.append(df2[-df2['key'].isin(df1['key'].unique())],ignore_index=True)
df1 = df1.drop('key',axis=1)
df1['key'] = df1['complex'].astype(str) + ' ' + df1['unit'].astype(str)
df2['key'] = df2['complex'].astype(str) + ' ' + df2['unit'].astype(str)
df1 = df1.append(df2[-df2['key'].isin(df1['key'].unique())],ignore_index=True)
df1 = df1.drop('key',axis=1)
df1 = df1.append(df2[-df2['complex'].isin(df1['complex'].unique())],ignore_index=True)