【问题标题】:How to select rows values starting by specific letters by group in a python dataframe?如何在python数据框中按组选择以特定字母开头的行值?
【发布时间】:2022-11-04 12:32:06
【问题描述】:

我有以下由 ID 和关联的簇号组成的数据框“数据”:

ID      cluster 
FP_101   1  
FP_102   1     
SP_209   3
SP_300   3
SP_209   1
FP_45    90
SP_50    90
FP_398   100
...

我想打印包含多个以 SP 和/或 FP 开头的 ID 的集群。 我认为我有答案的两个部分,但只是不知道以适当的方式将它们结合起来:

  • data = data[data['ID'].str.startswith('FP')] (SP 相同)
  • 选择函数:data = data.groupby(['cluster']).filter(lambda x: x['ID'].nunique() > 1)

结果应该来自上一个示例:

    ID      cluster 
    FP_101   1  
    FP_102   1
    SP_209   1     
    SP_209   3
    SP_300   3

我怎样才能结合安排这些功能来获得这个结果?

【问题讨论】:

    标签: python dataframe filter


    【解决方案1】:

    这是我对你的问题的理解;让我知道是否有帮助:

    1. 分离 SP 和 FP

      df['Prefix'] = df['ID'].apply(lambda x: x.split('_')[0])

      1. 按集群分组

      df2 = df.groupby(['cluster', 'Prefix'], as_index = False).agg({'ID':['nunique','unique']})

      1. 过滤

      df2.columns = df2.columns.to_flat_index().str.join('')

      df2[df2['IDnunique']>1]

    【讨论】:

    • 它有效,第一行给了我一个错误,所以我用 "data['Prefix_SID']= data['Source_ID'].str.get(0)" 更改它,这只是保留 ID 的第一个字母。非常感谢 :)
    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多