标签: drop-duplicates

Pandas - 与删除重复项相反,先保留

first我熟悉如何删除重复行,然后使用, last,参数none。没有什么太复杂的,并且有很多例子(即这里)。

但是,我正在寻找的是有一种方法可以找到重复项,但不是删除所有重复项并保留第一个,如果我有重复项,请保留所有重复项但删除第一个:

因此,我不想“如果重复则删除,保留第一个”,而是“如果重复则保留,首先删除”

例子:

给定这个数据框,并查看cost列中的重复项:

    ID name type cost
0    0    a   bb    1
1    1    a   cc    2 <--- there are duplicates, so drop this row
2  1_0    a   dd    2
3    2    a   ee    3 <--- there are duplicates, so drop this row
4  2_0    a   ff    3
5  2_1    a   gg    3
6  2_2    a   hh    3
Run Code Online (Sandbox Code Playgroud)

如果列中存在重复项cost,则只需删除第一个出现的项,但保留其余的项。

所以我的输出是:

    ID name type cost
0    0    a …
Run Code Online (Sandbox Code Playgroud)

python pandas drop-duplicates

9
推荐指数
1
解决办法
9377
查看次数

如何删除pandas中具有不同列名的重复数据?

我有一个 DataFrame,其中的列具有不同名称的重复数据:

In[1]: df
Out[1]: 
  X1   X2  Y1   Y2
 0.0  0.0  6.0  6.0
 3.0  3.0  7.1  7.1
 7.6  7.6  1.2  1.2
Run Code Online (Sandbox Code Playgroud)

我知道 .drop(columns = ) 存在,但是有没有一种更有效的方法可以删除它们,而不必列出列名称?或不..请告诉我,因为我可以使用 .drop()

python unique dataframe pandas drop-duplicates

7
推荐指数
2
解决办法
2317
查看次数

保留最后N个重复的熊猫

给定一个数据帧:

>>> import pandas as pd
>>> lol = [['a', 1, 1], ['b', 1, 2], ['c', 1, 4], ['c', 2, 9], ['b', 2, 10], ['x', 2, 5], ['d', 2, 3], ['e', 3, 5], ['d', 2, 10], ['a', 3, 5]]
>>> df = pd.DataFrame(lol)

>>> df.rename(columns={0:'value', 1:'key', 2:'something'})
  value  key  something
0     a    1          1
1     b    1          2
2     c    1          4
3     c    2          9
4     b    2         10
5     x    2          5
6     d    2          3
7     e …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas drop-duplicates

6
推荐指数
1
解决办法
1267
查看次数

有没有比 col.drop_duplicates() 更快的替代方法?

我正在尝试删除数据框(csv)中的重复数据并获取单独的 csv 来显示每列的唯一答案。问题是我的代码已经运行了一天(准确地说是 22 小时),我\xc2\xb4m 愿意接受其他一些建议。

\n

我的数据大约有 20,000 行,带有标题(示例)。我之前曾尝试过像 df[col].unique() 这样一一检查唯一列表,并且不需要那么长时间。

\n
df = pd.read_csv(\'Surveydata.csv\')\ndf_uni = df.apply(lambda col: col.drop_duplicates().reset_index(drop=True))\ndf_uni.to_csv(\'Surveydata_unique.csv\', index=False)\n
Run Code Online (Sandbox Code Playgroud)\n

我期望的是数据框具有相同的列集,但每个字段中没有任何重复(示例)。前任。如果 df[\'Rmoisture\'] 具有 Yes、No、Nan 的组合,则它应该只有这 3 个包含在另一个数据帧 df_uni 的同一列中。

\n

python-3.x pandas jupyter-notebook drop-duplicates

6
推荐指数
1
解决办法
8128
查看次数

删除列表列中的重复列表元素

这是我的数据框:

pd.DataFrame({'A':[1, 3, 3, 4, 5, 3, 3],
              'B':[0, 2, 3, 4, 5, 6, 7],
              'C':[[1,4,4,4], [1,4,4,4], [3,4,4,5], [3,4,4,5], [4,4,2,1], [1,2,3,4,], [7,8,9,1]]})
Run Code Online (Sandbox Code Playgroud)

我想设置\删除每行 C 列的重复值,但不删除重复的行。

这是我希望得到的:

pd.DataFrame({'A':[1, 3, 3, 4, 5, 3, 3],
              'B':[0, 2, 3, 4, 5, 6, 7],
              'C':[[1,4], [1,4], [3,4,5], [3,4,5], [4,2,1], [1,2,3,4,], [7,8,9,1]]})
Run Code Online (Sandbox Code Playgroud)

python set pandas drop-duplicates

6
推荐指数
2
解决办法
574
查看次数

不考虑顺序时检查 pandas 行是否唯一

我想知道是否有一种方法可以检查然后删除某些不唯一的行?

我的数据框看起来像这样:

    ID1 ID2 weight  
 0  2   4   0.5
 1  3   7   0.8 
 2  4   2   0.5 
 3  7   3   0.8
 4  8   2   0.5
 5  3   8   0.5
Run Code Online (Sandbox Code Playgroud)

编辑:我添加了更多行,以显示应保留可能具有相同权重的其他唯一行。

我认为当我使用 pandas 时,drop_duplicates(subset=['ID1', 'ID2','weight'], keep=False)它会单独考虑每一行,但不会认识到第 0 行和第 2 行以及第 1 行和第 4 行实际上是相同的值?

dataframe python-3.x pandas drop-duplicates

5
推荐指数
1
解决办法
1999
查看次数

如何在Python中的数据框中查找具有相同值的列的列表

我试图在数据框中查找列中具有相同值的列列表。R中有一个包whichAreInDouble,尝试在python中实现它。

df  =   
a b c d e f g h i   
1 2 3 4 1 2 3 4 5  
2 3 4 5 2 3 4 5 6  
3 4 5 6 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)

它应该给我具有相同值的列列表,例如

a, e are equal
b,f are equal 
c,g are equal
Run Code Online (Sandbox Code Playgroud)

python pandas drop-duplicates

4
推荐指数
1
解决办法
7804
查看次数

如果另一列中的值为空,则删除重复项 - Pandas

我拥有的:

df

Name |Vehicle
Run Code Online (Sandbox Code Playgroud)
Dave |Car
Mark |Bike
Steve|Car
Dave |
Steve|
Run Code Online (Sandbox Code Playgroud)

我想从 Name 列中删除重复项,但前提是 Vehicle 列中的相应值为 null。我知道我可以使用

 df.dropduplicates(subset=['Name']) 
Run Code Online (Sandbox Code Playgroud)

使用任何Keep =一种,'First' or 'Last'但我正在寻找的是一种从Name列的相应值是 的Vehicle列中删除重复项的方法null。所以基本上,保留NameifVehicle不为空并删除其余部分。如果名称没有重复,即使相应的值为Vehicle空,也保留该行。

非常感谢

python pandas drop-duplicates

3
推荐指数
1
解决办法
2703
查看次数

Pandas 多重索引仅针对特定索引重复

假设我有一个带有多个索引的 Pandas 数据框:

arrays = [["UK", "UK", "US", "FR"], ["Firm1", "Firm1", "Firm2", "Firm1"], ["Andy", "Peter", "Peter", "Andy"]]
idx = pd.MultiIndex.from_arrays(arrays, names = ("Country", "Firm", "Responsible"))
df = pd.DataFrame(np.zeros(4), index = idx)
df

                             0
Country Firm  Responsible     
UK      Firm1 Andy         0.0
              Peter        0.0
US      Firm2 Peter        0.0
FR      Firm1 Andy         0.0
Run Code Online (Sandbox Code Playgroud)

我想删除前两个索引级别的重复条目(在示例中,包含“UK”和“Firm1”条目的行)并仅保留第三个索引“Responsible”等于“Andy”的行。所以在这种情况下我想删除第二行。

在pandas中有,drop_duplicates() 但我不知道如何i)仅将其应用于前两个索引级别,ii)指定保留带有“Andy”的行并删除其余行(该函数仅允许“first”和“最后'作为参数)

我很乐意提供意见!提前谢谢了。

python multi-index pandas drop-duplicates

3
推荐指数
1
解决办法
1635
查看次数

删除重复项的自定义逻辑

我有以下数据集,我希望将一些自定义逻辑应用于:

data = pd.DataFrame({'ID': ['A','B','B','C','C','D','D'], 
'Date': ['2018-07-02T02:21:12.000+0000','2018-07-02T02:28:29.000+0000','2018-07-02T02:28:31.000+0000','2018-07-02T02:30:58.000+0000','2018-07-02T02:31:01.000+0000','2018-07-02T02:42:46.000+0000','2018-07-02T02:41:47.000+0000'],
'Action': ['Start','Start','Start','Stop','Stop','Start','Start'],
'Group': [5,13,13,19,19,2,2],
'Value': [100,110,110,95,95,280,280]
})
Run Code Online (Sandbox Code Playgroud)

第 1:2、3:4 和 5:6 行都相同,除了日期列中的值相差几秒钟。如果 1) 相似行之间的“日期”时间增量小于 1 分钟并且 2) 所有其他信息都相同,是否有办法删除重复项?

结果应如下所示:

result = pd.DataFrame({
'ID': ['A','B','C','D'], 
'Date': ['2018-07-02T02:21:12.000+0000','2018-07-02T02:28:29.000+0000','2018-07-02T02:30:58.000+0000','2018-07-02T02:42:46.000+0000'],
'Action': ['Start','Start','Stop','Start'],
'Group': [5,13,19,2],
'Value': [100,110,95,280]
})
Run Code Online (Sandbox Code Playgroud)

python pandas drop-duplicates

2
推荐指数
1
解决办法
267
查看次数