【问题标题】:Subset pandas DataFrame based on two columns in another DataFrame基于另一个 DataFrame 中的两列的子集 pandas DataFrame
【发布时间】:2018-05-02 18:58:09
【问题描述】:

我有如下图所示的 pandas DataFrame。 df1df2 都是 df 的子集。我现在想创建df 的两个新子集,我们称它们为dftrndftstdftrn 应包含 df 的所有值,它们位于 df1df2 中。 dftst 应该包含不在df1df2 中的df 值。最快的方法是什么?

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]
})

我希望 dftrndftst 看起来像什么(指数无关紧要):

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

【问题讨论】:

  • df1df2似乎是不正确的数据帧。列的尺寸不匹配。可能只删除每个产品上的一个产品
  • 谢谢,已修复。

标签: python pandas dataframe


【解决方案1】:

concatisin 一起使用

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

【讨论】:

    猜你喜欢
    • 2013-01-15
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多