【问题标题】:Selecting rows based on condition in python pandas根据python pandas中的条件选择行
【发布时间】:2021-11-17 23:18:49
【问题描述】:

我有一个数据框,其列为 ['ID','Title','Category','Company','Field'],它有两个空白值,并且在某些地方缺失值被设置为 N/A。我必须选择可用信息最多的行。

例如,一种情况可能是。

  'ID'           'Title'   'Category'      'Company'     'Field'
0 ABD12567       Title1                    Company1
1 ABD12567       Title1     N/A                          Field1
2 ABD12567       Title1     Category1      Company1      Field1
3 ABD12567       Title1                    Company1
4 ABD12567       Title1     N/A            Company1      Field1

在这种情况下,我想选择第 2 行,因为它具有最大的可用信息。我尝试在数据框中添加一个长度列,我将在其中添加所有字符串长度,并在分组的帮助下选择具有最大长度的列。例如 catalog_11=catalog_1.groupby(['ID'], as_index = False).agg({'combined_len': max}) 。在这种情况下,我将保留该行的索引 2,并将从旧数据框中过滤掉索引为 2 的行。但这不起作用,因为我在分组后丢失了旧数据帧的索引。不知道如何解决这个问题。请帮我选择正确的行。不确定如何通过其他解决方法解决此问题。

如果除了我使用的组合长度之外还有其他选择,请提出建议。

【问题讨论】:

    标签: python pandas dataframe group-by subset


    【解决方案1】:

    您可以使用(~df.isin(["", "N/A"])).sum(1) 通过对axis=1 上的布尔值求和来获取一行中有效值的数量。将其与groupbyidxmax 结合使用:

    示例数据(添加了一个额外的 ID 以展示 groupby):

      ID             Title      Category       Company       Field
    0 ABD12567       Title1                    Company1   
    1 ABD12567       Title1     N/A                          Field1
    2 ABD12567       Title1     Category1      Company1      Field1
    3 ABD12567       Title1                    Company1   
    4 ABD12567       Title1     N/A            Company1      Field1
    5 ABD12568       Title1     N/A            Company1      Field1
    

    代码:

    idx = (df.assign(max=(~df.isin(["", "N/A"])).sum(1)) # assign temp column
             .groupby("ID")["max"].idxmax()) #retrieve index of max value within each group
    
    print (df.loc[idx])
    
             ID   Title   Category   Company   Field
    2  ABD12567  Title1  Category1  Company1  Field1
    5  ABD12568  Title1        N/A  Company1  Field1
    

    【讨论】:

      猜你喜欢
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2017-09-23
      • 1970-01-01
      • 2022-08-03
      • 2018-06-10
      相关资源
      最近更新 更多