【问题标题】:subset dataframe using unique values and return all rows for each unique value使用唯一值子集数据框并返回每个唯一值的所有行
【发布时间】:2021-06-27 06:40:41
【问题描述】:

我正在尝试根据唯一值获取熊猫数据框的子集。

我的整个数据框大约有 5k 行,其中每一行都有一个 ID 和文本,每个 ID 可以有多个文本条目。数据框看起来像这样:

Text | ID
bla    1
blu    1 
ble    1 
bli    3
bly    3
bln    2
blt    2
blk    2
blv    2
blw    6

我想做的是指定多个唯一 ID,例如 3 并返回它的所有行,最终结果如下所示:

    Text | ID 
    bli    3
    bly    3
    bln    2
    blt    2
    blk    2
    blv    2
    blw    6

返回哪个 ID 无关紧要,只是它是 3 个 ID,如果我重新运行该方法,它始终是相同的 3 个 ID。

我知道如何使用这种方法选择数据框的唯一值:

unique = df['ID'].nunique()

但这是我的智慧结束的地方 - 感谢任何帮助。

【问题讨论】:

    标签: python python-3.x pandas dataframe subset


    【解决方案1】:

    如果这 3 个 ID 无关紧要,您可以使用前 3 个 unique_3 = df['ID'].unique[:3] 然后选择带有df_id = df[df["ID"].isin(unique_3)] 的行。

    【讨论】:

    • 你好@luanpo - 谢谢你的建议,但是第一行代码在 .unique(:3) 上抛出了一个无效的语法错误 - 还有另一种选择三个 unqiue 值的方法吗?跨度>
    • 谢谢@SergeBallesta。它现在应该可以工作了。
    【解决方案2】:

    使用np.random.RandomState 和种子以获得可重复性,使用np.random.choicereplace=False 选择不同的元素,然后使用pd.Series.unique 形成候选者,并使用pd.Series.isin 来掩盖所需的ID 三元组:

    def get_unique_id_subset(df, k=3, seed=51):
        id_list = np.random.RandomState(seed).choice(df.ID.unique(), k, replace=False)
        return df[df.ID.isin(id_list)]
    

    使用:

    >>> get_unique_id_subset(df)
      Text  ID
    0  bla   1
    1  blu   1
    2  ble   1
    3  bli   3
    4  bly   3
    9  blw   6
    
    >>> get_unique_id_subset(df)  # same result as before
      Text  ID
    0  bla   1
    1  blu   1
    2  ble   1
    3  bli   3
    4  bly   3
    9  blw   6
    
    >>> get_unique_id_subset(df, seed=19)  # changed the seed
      Text  ID
    0  bla   1
    1  blu   1
    2  ble   1
    5  bln   2
    6  blt   2
    7  blk   2
    8  blv   2
    9  blw   6
    
    >>> get_unique_id_subset(df, seed=19)  # result consistent with the seed
      Text  ID
    0  bla   1
    1  blu   1
    2  ble   1
    5  bln   2
    6  blt   2
    7  blk   2
    8  blv   2
    9  blw   6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多