Python 熊猫将一个数据帧与另一个具有不同形状的数据帧的差异相结合
我试图结合这两个数据帧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来执行您想要的操作: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 = 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)