Python 数据排序和删除重复项
我有数据框 df1 我正在寻找作为输出Python 数据排序和删除重复项,python,pandas,dataframe,Python,Pandas,Dataframe,我有数据框 df1 我正在寻找作为输出 ec em p_x p_y 0 22 aa 47 nan 1 67 bb 92 40 2 67 bb 92 56 对于特定的ec和em列,我想删除基于p_x和p_y列的重复值。请让我知道如何才能做到这一点 或者即使我可以像这样重新订购df1 ec em p_x p_y 0 22 aa 44 44 1 22 aa 45 45 2 22 aa 47 nan 3 67
ec em p_x p_y
0 22 aa 47 nan
1 67 bb 92 40
2 67 bb 92 56
对于特定的ec和em列,我想删除基于p_x和p_y列的重复值。请让我知道如何才能做到这一点 或者即使我可以像这样重新订购df1
ec em p_x p_y
0 22 aa 44 44
1 22 aa 45 45
2 22 aa 47 nan
3 67 bb 56 56
4 67 bb 92 92
5 67 bb 92 40
6 67 bb 92 56
7 82 tt 23 23
8 82 tt 23 23
9 82 tt 12 12
我可以使用df1[~df1['p_x']==df1['p_y']]
并实现期望的结果以下是解决您问题的熊猫代码:
import numpy as np
conditions = [
(df['p_x'].isna() == False) & (df['p_y'].isna() == False),
(df['p_x'].isna() == False) & (df['p_y'].isna() == True),
(df['p_x'].isna() == True) & (df['p_y'].isna() == False)
]
choices = [df['p_x'] * df['p_y'], df['p_x'], df['p_y']]
df['flag'] = np.select(conditions, choices, default='black')
df = df.drop_duplicates(subset=["flag"], keep = False).drop(columns = ["flag"])
让我知道这是否有助于您您能解释您的预期输出吗?您必须进一步解释“重复”的确切含义,因为您的预期输出中有许多重复项。为什么您的输出不包含82 tt 23 12和82 tt 23 23?它们是另一对ec和em的最大p_x的p_y的唯一值。我想删除重复值。我尝试使用df2=df1[~(df1['p_x']==df1['p_y']),但这不起作用,因为p_x和p_y列的排序/顺序不同。我已经回答了,但我也感到困惑。不应该
df.loc[~df['p_x','p_y']].agg(frozenset,1).复制(keep=False)]
就足够了吗?感谢Ankit提供的解决方案。。。这对我来说是数值的。但当我使用相同的代码时,p_x和p_y列有字母数字值,它给出了与字符串相关的错误。一般解决方案有一个变化,我明天将更新相同的。
import numpy as np
conditions = [
(df['p_x'].isna() == False) & (df['p_y'].isna() == False),
(df['p_x'].isna() == False) & (df['p_y'].isna() == True),
(df['p_x'].isna() == True) & (df['p_y'].isna() == False)
]
choices = [df['p_x'] * df['p_y'], df['p_x'], df['p_y']]
df['flag'] = np.select(conditions, choices, default='black')
df = df.drop_duplicates(subset=["flag"], keep = False).drop(columns = ["flag"])