【问题标题】:Filtering dataframe based on column value_counts (pandas)根据列 value_counts (pandas) 过滤数据框
【发布时间】:2017-11-03 21:54:11
【问题描述】:

我是第一次尝试熊猫。我有一个包含两列的数据框:user_idstring。每个 user_id 可能有多个字符串,因此会在数据框中多次显示。我想从中得出另一个数据框;仅列出至少有 2 个或更多 strings 关联的 user_ids

我尝试了df[df['user_id'].value_counts()> 1],我认为这是执行此操作的标准方法,但它产生了IndexingError: Unalignable boolean Series key provided。有人可以清除我的概念并提供正确的替代方案吗?

【问题讨论】:

标签: python pandas


【解决方案1】:

我认为你需要transform,因为需要与df 相同的index 掩码。但是如果使用 value_counts index 被改变,它会引发错误。

df[df.groupby('user_id')['user_id'].transform('size') > 1]

【讨论】:

  • 你能解释一下你所说的面具是什么意思吗?
  • 掩码条件类似于df['user_id'].value_counts()> 1
  • “掩码”基本上是特定条件的真假值列表。掩码通常用于子集数据。假设您有一个包含狗的名字和年龄的数据框,并且您只想查看 5 岁以上的狗。掩码基本上测试每一行(每条狗)是否超过五年,并返回一个真假序列。
  • @not_a_robot - 非常感谢您的评论。
  • @ZakS - 需要在 groupby 之后定义列 test_filtered1 = test_filtered[test_filtered.groupby('disposition')['disposition'].transform('size')>100]
【解决方案2】:

您只需执行以下操作,

col = 'column_name'   # name of the column that you consider
n = 10                # how many occurrences expected to be appeared

df = df[df.groupby(col)[col].transform('count').ge(n)]

这应该根据需要过滤数据框

【讨论】:

    【解决方案3】:

    我遇到了同样的挑战并使用了:

    df['user_id'].value_counts()[df['user_id'].value_counts() > 1]
    

    致谢:blog.softhints

    【讨论】:

      【解决方案4】:

      l2 = ((df.val1.loc[df.val== 'Best'].value_counts().sort_index()/df.val1.loc[df.val.isin(l11)].value_counts() .sort_index())).loc[lambda x : x>0.5].index.tolist()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        • 2013-07-16
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 2019-07-20
        • 1970-01-01
        相关资源
        最近更新 更多