Python 基于另一个数据帧中的两列创建数据帧子集
我有如下所示的熊猫数据框。df1和df2都是df的子集。现在我想创建df的两个新子集,我们称它们为dftrn和dftst。dftrn应包含df1和df2中的所有df值。dftst应该包含df1和df2中没有的df值。最快的方法是什么Python 基于另一个数据帧中的两列创建数据帧子集,python,pandas,dataframe,Python,Pandas,Dataframe,我有如下所示的熊猫数据框。df1和df2都是df的子集。现在我想创建df的两个新子集,我们称它们为dftrn和dftst。dftrn应包含df1和df2中的所有df值。dftst应该包含df1和df2中没有的df值。最快的方法是什么 df = pd.DataFrame({ 'product': ['prod1', 'prod1', 'prod1', 'prod2', 'prod2', 'prod2'], 'date': ['2017-01-01', '2017-02-01', '
df = pd.DataFrame({
'product': ['prod1', 'prod1', 'prod1', 'prod2', 'prod2', 'prod2'],
'date': ['2017-01-01', '2017-02-01', '2017-03-01', '2017-02-01', '2017-03-01', '2017-04-01'],
'value': [5.1, 5.2, 5.4, 2.3, 2.2, 2.4]
})
df1 = pd.DataFrame({
'product': ['prod1', 'prod1'],
'date': ['2017-02-01', '2017-03-01'],
'value': [5.1, 5.4]
})
df2 = pd.DataFrame({
'product': ['prod2', 'prod2'],
'date': ['2017-02-01', '2017-04-01'],
'value': [2.3, 2.4]
})
我希望dftrn和dftst看起来像什么并不重要:
dftrn
date product value
0 2017-02-01 prod1 5.2
1 2017-03-01 prod1 5.4
2 2017-02-01 prod2 2.3
3 2017-04-01 prod2 2.4
dftst
date product value
0 2017-01-01 prod1 5.1
1 2017-03-01 prod2 2.2
将concat与isin结合使用
DF1和DF2被视为不正确的数据帧。列的尺寸不匹配。可能只需在每个屏幕上删除一个产品。谢谢,已经修复。
s=pd.concat([df1,df2])
df[df.apply(tuple,1).isin(s.apply(tuple,1))]
Out[77]:
date product value
2 2017-03-01 prod1 5.4
3 2017-02-01 prod2 2.3
5 2017-04-01 prod2 2.4
df[~df.apply(tuple,1).isin(s.apply(tuple,1))]
Out[78]:
date product value
0 2017-01-01 prod1 5.1
1 2017-02-01 prod1 5.2
4 2017-03-01 prod2 2.2