如果满足多个特定条件,则在 pandas 中删除行

Posted

技术标签:

【中文标题】如果满足多个特定条件,则在 pandas 中删除行【英文标题】:Drop rows in pandas if multiple specific conditions are met 【发布时间】:2022-01-13 14:23:29 【问题描述】:

我有一个看起来像这样的 pandas 数据框:

Group  ImportedFrom    Item  SomeDate
 X     Switzerland       A    1/4/2021
 X       US              A    2/1/2021
 Y       US              B    2/2/2021
 Y       US              C    3/1/2021
 Y       US              C    
 X       China           D    

仅当“ImpotedFrom”和“Group”的唯一组合在数据框中至少出现一次时,我才需要删除 someDate 为空/空的行。

最终的结果应该是这样的:

Group  ImportedFrom    Item  SomeDate
 X     Switzerland       A    1/4/2021
 X       US              A    2/1/2021
 Y       US              B    2/2/2021
 Y       US              C    3/1/2021  
 X       China           D    

在这个例子中,第 5 行被删除(因为 US 与 Group X 连接的组合出现了不止一次,并且 someDate 为空)。保留最后一行是因为中国(X 组)在整个数据框中只出现一次,尽管 someDate 为空。

不胜感激,谢谢!

【问题讨论】:

与我们分享您的尝试? 【参考方案1】:

您可以使用drop_duplicates

检查我的答案:

import numpy as np
import pandas as pd

data = 
    'Group':['X', 'X', 'Y','Y','Y','X'],
    'ImportedFrom':['Switzerland', 'US', 'US', 'US', 'US', 'China'],
    'Item':['A', 'A' , 'B','C','C','D'],
    'SomeDate':['1/4/2021', '2/1/2021' , '2/1/2021','3/1/2021', '',''],
    
# Create the data frame
df = pd.DataFrame(data)

df1 = df.drop_duplicates(subset=['ImportedFrom','Item'])

print(df1)

输出:

  Group ImportedFrom Item  SomeDate
0     X  Switzerland    A  1/4/2021
1     X           US    A  2/1/2021
2     Y           US    B  2/1/2021
3     Y           US    C  3/1/2021
5     X        China    D    

【讨论】:

【参考方案2】:
# Normalize nulls
df = df.replace(None: np.nan, '': np.nan)

i = df.set_index(['Group', 'ImportedFrom', 'Item']).index
df = df[~(i.duplicated() & df['SomeDate'].isna())]

输出:

>>> df
  Group ImportedFrom Item  SomeDate
0     X  Switzerland    A  1/4/2021
1     X           US    A  2/1/2021
2     Y           US    B  2/2/2021
3     Y           US    C  3/1/2021
5     X        China    D       NaN

【讨论】:

以上是关于如果满足多个特定条件,则在 pandas 中删除行的主要内容,如果未能解决你的问题,请参考以下文章

pandas如何删除指定行

如果某些条件为真或假,则在颤动中显示行

pandas使用query函数基于组合判断条件删除dataframe中的不满足条件的数据行(removing rows based on multiple dataframe column value

如果满足 for 循环中的条件,则在同一行中的其他单元格中获取值

有条件地删除重复的pandas python

有条件地删除重复的pandas python