Python 使用条件删除重复项

Python 使用条件删除重复项,python,pandas,Python,Pandas,假设我有以下数据帧: >>> import pandas as pd >>> >>> d=pd.DataFrame() >>> >>> d['Var1']=['A','A','B','B','C','C','D','E','F'] >>> d['Var2']=['A','Z','B','Y','X','C','Q','N','P'] >>> d['Value']=[3

假设我有以下数据帧:

>>> import pandas as pd
>>> 
>>> d=pd.DataFrame()
>>> 
>>> d['Var1']=['A','A','B','B','C','C','D','E','F']
>>> d['Var2']=['A','Z','B','Y','X','C','Q','N','P']
>>> d['Value']=[34, 45, 23, 54, 65, 77,100,102,44]
>>> d
  Var1 Var2  Value
0    A    A     34
1    A    Z     45
2    B    B     23
3    B    Y     54
4    C    X     65
5    C    C     77
6    D    Q    100
7    E    N    102
8    F    P     44
>>> 
我想删除“Var1”中存在重复项的情况,但我想确保保留的重复项是“Var1”==“Var2”中的重复项

我的输出数据帧是:

     Var2  Value
Var1            
A       A     34
B       B     23
C       C     77
D       Q    100
E       N    102
F       P     44
>>> 
有没有关于我如何做到这一点的建议?使用groupby过滤器是最好的方法吗?

这里有一个简单的例子:

>>d.loc[~d.Var1[(d.Var1==d.Var2.argsort()]。重复('last')]
Var1 Var2值
0 A 34
2 B 23
5 C 77
6dq100
7 E N 102
8 F P 44
如果希望(
d.set_index('Var1')
)准确获取发布的输出,则可以在
Var1
上设置索引

要分解它:

  • d.Var1[(d.Var1==d.Var2).argsort()]
    Var1
    中的值串联,排列方式应确保
    Var1==Var2
    中的行位于末尾

  • ~d.Var1[(d.Var1==d.Var2).argsort()].duplicated('last')
    对于
    Var1
    不重复的行为true;如果有重复项,我们选择最后一个(因此
    Var1==Var2
    具有优先级)

这里有一条单行线:

>>d.loc[~d.Var1[(d.Var1==d.Var2.argsort()]。重复('last')]
Var1 Var2值
0 A 34
2 B 23
5 C 77
6dq100
7 E N 102
8 F P 44
如果希望(
d.set_index('Var1')
)准确获取发布的输出,则可以在
Var1
上设置索引

要分解它:

  • d.Var1[(d.Var1==d.Var2).argsort()]
    Var1
    中的值串联,排列方式应确保
    Var1==Var2
    中的行位于末尾

  • ~d.Var1[(d.Var1==d.Var2).argsort()].duplicated('last')
    对于
    Var1
    不重复的行为true;如果有重复项,我们选择最后一个(因此
    Var1==Var2
    具有优先级)


    • 我的建议是创建Var 2和作为字典的值

          d['Var1']=['A','A','B','B','C','C','D','E','F']
          d['Var2']=['A','Z','B','Y','X','C','Q','N','P']
          d['Var2Val'] = {'A':34,'Z':45,'B':23,'Y':54,'X':65,'C':77,'Q':100,'N':102,'P':44}
      
      然后我会为Var1创建一个没有重复项的列表,如果它们在Var2中,则打印它们

          for x in d['Var1']:
              if d['Var1'][x] in d['Var2']:
      
      然后打印表格


      至少这是最简单的方法,尽管可能有点长,但我的建议是创建Var2和作为字典的值

          d['Var1']=['A','A','B','B','C','C','D','E','F']
          d['Var2']=['A','Z','B','Y','X','C','Q','N','P']
          d['Var2Val'] = {'A':34,'Z':45,'B':23,'Y':54,'X':65,'C':77,'Q':100,'N':102,'P':44}
      
      然后我会为Var1创建一个没有重复项的列表,如果它们在Var2中,则打印它们

          for x in d['Var1']:
              if d['Var1'][x] in d['Var2']:
      
      然后打印表格

      至少这是最简单的方法,尽管可能有点长