如果满足多个特定条件,则在 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使用query函数基于组合判断条件删除dataframe中的不满足条件的数据行(removing rows based on multiple dataframe column value