Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:基于行值删除重复项_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫:基于行值删除重复项

Python 熊猫:基于行值删除重复项,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,我想根据不同的条件删除重复项 A B 0 1 1.0 1 1 1.0 2 2 2.0 3 2 2.0 4 3 3.0 5 4 4.0 6 5 5.0 7 - 5.1 8 - 5.1 9 - 5.3 我想删除A列中除带“-”的行以外的所有重复项。在这之后,我

我有一个数据帧,我想根据不同的条件删除重复项

        A      B
  0     1     1.0
  1     1     1.0
  2     2     2.0
  3     2     2.0
  4     3     3.0
  5     4     4.0
  6     5     5.0
  7     -     5.1
  8     -     5.1
  9     -     5.3
我想删除A列中除带“-”的行以外的所有重复项。在这之后,我想删除A列中的重复项,并根据它们的B列值使用“-”作为值。给定输入数据帧,这应返回以下内容:-

        A      B
  0     1     1.0
  2     2     2.0
  4     3     3.0
  5     4     4.0
  6     5     5.0
  7     -     5.1
  9     -     5.3
我有下面的代码,但是对于大量的数据来说效率不是很高,我该如何改进它

 def generate(df):
     str_col = df[df["A"] == "-"]

     df.drop(df[df["A"] == "-"].index, inplace=True)

     df = df.drop_duplicates(subset="A")

     str_col = b.drop_duplicates(subset="B")

     bigdata = df.append(str_col, ignore_index=True)

     return bigdata.sort_values("B")

重复
eq

df[~df.duplicated('A')            # keep those not duplicates in A
   | (df['A'].eq('-')             # or those '-' in A
      & ~df['B'].duplicated())]   # which are not duplicates in B
输出:

   A    B
0  1  1.0
2  2  2.0
4  3  3.0
5  4  4.0
6  5  5.0
7  -  5.1
9  -  5.3
df.删除重复项(子集=['A','B'])

给出完整的数据集:

   A    B  C
0  1  1.0  0
1  1  1.0  1
2  2  2.0  2
3  2  2.0  3
4  3  3.0  4
5  4  4.0  5
6  5  5.0  6
7  -  5.1  7
8  -  5.1  8
9  -  5.3  9
结果:

   A    B  C
0  1  1.0  0
2  2  2.0  2
4  3  3.0  4
5  4  4.0  5
6  5  5.0  6
7  -  5.1  7
9  -  5.3  9

groupby
+
head

df.groupby(['A','B']).head(1)
Out[7]: 
   A    B
0  1  1.0
2  2  2.0
4  3  3.0
5  4  4.0
6  5  5.0
7  -  5.1
9  -  5.3

在您给定的示例中,
df.drop\u duplicates()
也可以实现同样的效果。您将如何实现这一点,请参见我对PandasSo simple是新手。谢谢注意:这只适用于您的
A
B
完全重复的情况。e、 g.如果第1行
B
变为
2.0
,则第0行和第1行仍将显示。虽然很简单,但这与我的答案有相同的警告-如果A重复,但B唯一,则不会删除A的重复项。