根据python中的条件选择行

2024-10-04 09:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列为 ['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行,因为它有最大的可用信息。我尝试向数据框中添加一个长度的列,我将在其中添加所有字符串长度,并在GROUPBY的帮助下选择长度最大的一个。例如catalog_11=catalog_1.groupby(['ID'], as_index = False).agg({'combined_len': max})。在本例2中,我将保留该行的索引,并从旧数据帧中筛选出索引为2的行。但这不起作用,因为我在分组后丢失了旧数据帧的索引。不知道如何解决这个问题。请帮我选对一排。不知道如何用其他解决方法解决这个问题

如果有任何其他选择,而不是我使用的组合长度,那么请建议


Tags: 数据信息idfieldtitle地方company案例
1条回答
网友
1楼 · 发布于 2024-10-04 09:29:40

您可以使用(~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

相关问题 更多 >