【问题标题】:Pandas dataframe getting number of categorical values that are in a listPandas 数据框获取列表中分类值的数量
【发布时间】:2021-10-17 17:50:05
【问题描述】:

我是在 python 中的数据集上学习机器学习的新手,我正在尝试在以下数据帧上执行以下操作(仅显示一个 sn-p)

id country device label
100 sg samsung 0
100 ch galaxy s 0
200 ab pocophone 1
200 ee iphone 1 1
200 my iphone 2 1

我正在努力

  1. 获取标签所在国家/地区的列表 = 1
  2. 对于每个 id,在所有国家/地区中,计算 1) 中列表中的国家/地区,并获取每个 id 存在的国家/地区的总数。

更新:

我已经设法得到一个标签 = 1 的国家/地区列表。对于每个 id,如何找到他们拥有的国家/地区的数量属于前面提到的列表?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你可以使用

    df.loc[ df['label'] == 1 ] ['country']
    

    这将找到哪些索引的 df['label'] 为 1,locate 它们,并从中获取 'country' 系列。

    【讨论】:

      【解决方案2】:

      尝试通过 loc 访问器和布尔掩码:

      count=df.loc[df['label'].eq(1),['id','country']].value_counts()
      #count the values of country where 'label' is 1
      lst=count.index.get_level_values(1).unique().tolist()
      #get the index of count for country names
      

      lst的输出:

      ['ab', 'ee', 'my']
      

      count的输出:

      id   country
      200  ab         1
           ee         1
           my         1
      dtype: int64
      

      【讨论】:

        【解决方案3】:

        如果我理解正确:

        1. 标签为 1 的独特国家/地区
        >>> df.query('label == 1')['country'].unique()
        array(['ab', 'ee', 'my'], dtype=object)
        
        1. 标签 = 1 时每个 id 的唯一国家/地区计数
        >>> df.query('label == 1').groupby('id')['country'].nunique()
        id
        200    3
        Name: country, dtype: int64
        
        1. 更新版本:
        countries = df.query('label == 1')['country'].unique()
        df.query('country in @countries').groupby('id')['country'].nunique()
        

        【讨论】:

        • 您好,感谢您的帮助。我已经设法获得标签 = 1 的国家/地区列表。现在我需要为每个 id 做的是,找到他们拥有的国家/地区数量,这些国家/地区属于前面提到的列表。请问这怎么可能?
        • 我相信这已经是我的代码 #2 正在做的事情了。你能给我预期的输出吗?
        • 参考我上面问题中的示例数据框。 label_countries =[ 'sg', 'ch', 'ee'] . id = 100 的值为 2 而 `id = 200' 的值为 1
        • 我设法做到了,尽管方式非常笨拙。 a = calls.groupby(['id', 'country']).count().reset_index()b = a[a['country'].isin(country_bot)]c= b.groupby(['id']).count().reset_index()
        • 先生,它似乎不起作用,最终为每个 id 提供 1 的值。但没关系我尝试的笨重方法有效
        猜你喜欢
        • 2014-04-23
        • 2014-06-20
        • 1970-01-01
        • 2019-11-06
        • 2019-02-23
        • 2023-03-03
        • 2020-03-09
        • 2022-12-03
        • 1970-01-01
        相关资源
        最近更新 更多