【问题标题】:How to use distinct and where clause together in Pandas?如何在 Pandas 中同时使用 distinct 和 where 子句?
【发布时间】:2019-09-03 22:07:14
【问题描述】:

我有一个如下所示的数据框和列表

op1 = pd.DataFrame({
'subject_id':[1,1,2,3,4,4,5],
'iid': [21,22,23,24,26,26,27],
'los':[121,122,123,124,111,111,131],
'area':['a','a','b','c','d','d','f'],
'date' : ['1/1/2017','1/2/2017','1/3/2017','1/4/2017','1/6/2017','1/6/2017','1/8/2109'],
'val' :[5,10,5,16,26,26,7]
 })

sub_list = [1,2,3,4]

我想检查sub_list 中的subject_id 是否存在于op1 中。如果存在,则从列 los,iid,area 中获取 distinct 值作为该 subject_id(查找 subject_id 1 and 4 之间的差异(有重复项)

我尝试了以下但不能有多个列

op1[op1['subject_id'].isin(sub_list)] # how to use distinct records here?

我必须将此应用于一百万条记录。所以任何优雅高效的解决方案都是有帮助的

我正在寻找类似的东西

select distinct subject_id, iid,los, area from op1
where subject_id in [sub_list] 

我希望我的输出如下所示

【问题讨论】:

  • 下面的所有答案都非常好。但是,我可以将一个答案标记为解决方案。所以,我选择 GZ0 答案,因为它满足了预期的输出条件。尽管如此,其他答案也被赞成

标签: python pandas dataframe pandas-groupby


【解决方案1】:

如果您打算只返回选定的列,请执行以下操作:

result = op1.loc[op1["subject_id"].isin(sub_list), ["subject_id", "los", "iid", "area"]].drop_duplicates()

【讨论】:

  • 赞成。是的,我希望只返回那些列。
【解决方案2】:

我不确定这有多快,但你可以试试:

(op1[['subject_id','iid','los','area']]
     .drop_duplicates(['subject_id','iid','los','area'])
     .set_index('subject_id')
     .loc[sub_list]
)

【讨论】:

    【解决方案3】:

    其实是前面几个答案的混合

    distCols = ["subject_id", "iid",
                "los", "area"]
    
    op1[op1['subject_id'].isin(sub_list)].drop_duplicates(distCols)
    

    【讨论】:

      【解决方案4】:
      op1[op1['subject_id'].isin(sub_list)].drop_duplicates(subset=list_columns_to_distinct)
      

      【讨论】:

      • 但是如何只选择几列呢?我想只检查特定列中的重复项。因此与众不同
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2023-01-27
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多