【问题标题】:filter dataframe with different masks使用不同的掩码过滤数据框
【发布时间】:2018-01-18 04:23:59
【问题描述】:

我有 2 个被过滤的数据框

df_pass = total_avg[total_avg>3] produces the following dataframe
    AAPL        GOOGL  GOOG     MSFT 
1   3.401017    NaN     NaN     3.255119
2   NaN         NaN     NaN      NaN
3   4.16666     NaN     NaN     3.264101
4   3.049794    4.331   NaN     NaN

我在另一个 DF 上有另一个过滤器,但 DF 的布局与第一个相同。所以这段代码产生了下面的DF结果

df_min_pass = total_min[total_min>-10]  
    AAPL    GOOGL   GOOG    MSFT
1   NaN      NaN   -2.099   NaN
2   NaN      NaN   -6.08    NaN
3   NaN    -8.319  -1.86    -7.3
4   NaN    -7.304  -6.92    NaN

请记住,这只是 DF 的一个示例。他们有更多的列。我想得到一个结合了do的结果数据框。因此,如果它通过了这两个条件,它将在另一个 DF 中显示结果,否则如果它不满足麻烦条件,则显示 NaN。我尝试了多种组合,例如

df_combo_all = (df_pass[df_pass >3]) & (df_min_pass[df_min_pass >-10])
df_combo_all = df_combo_all[(df_pass[df_pass >3]) & (df_min_pass[df_min_pass >-10])]

过滤器单独工作,但我不断收到此错误

TypeError:输入类型不支持 ufunc 'bitwise_and',并且根据强制转换规则 ''safe'',输入无法安全地强制转换为任何支持的类型。

似乎有多个掩码问题和其他关于按位错误的问题,但我似乎找不到适合我的问题。谁能帮忙

【问题讨论】:

  • 当一个单元格同时填入两个df时,你如何组合它们?

标签: python pandas dataframe filter


【解决方案1】:

更新:让我们使用mask

df_pass.mask(df_min_pass.isnull())

输出:

   AAPL  GOOGL  GOOG      MSFT
1   NaN    NaN   NaN       NaN
2   NaN    NaN   NaN       NaN
3   NaN    NaN   NaN  3.264101
4   NaN  4.331   NaN       NaN

【讨论】:

  • 是的,我的问题并没有明确说明我想要的结果。我不想要一个组合的数据框。只有当 df_pass 中有一个值并且 df_min_pass 中有相应的值时,我才想从 df_pass 返回结果。因此,生成的数据框应如下所示,您仅获得 2 个值(即条件通过了两个条件` AAPL GOOGL GOOG MSFT 1 NaN NaN NaN 2 NaN NaN NaN 3 3.26 4 NaN 4.33 NaN`
  • 抱歉,我不知道如何在注释中添加代码,但唯一通过的标准是第 3 行中的 MSFT(最后一个值)和第 4 行中的 GOOGL(第二个值)。我想将 df_pass 数据框的值传递给@Tai 评论
  • @JWestwood 你会用你的预期结果修改你的问题吗?谢谢!
  • 正是我想要的。 ty
猜你喜欢
  • 2022-08-19
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2022-11-11
  • 2018-05-06
  • 1970-01-01
相关资源
最近更新 更多