我需要删除所有使用不同索引重复的行

时间:2019-09-05 15:11:14

标签: python python-3.x pandas dataframe

我有一个像这样的数据框:

file.txt.bak

结果df为:

import pandas as pd

d = {
    1: {'name': '1000', 1: 10, 2: 20, 3: 30},
    2: {'name': '1000', 1: 10, 2: 20, 3: 30},
    3: {'name': '2000', 1: 11, 2: 21, 3: 30},
    4: {'name': '6788', 1: 11, 2: 21, 3: 30},
    5: {'name': '0909', 1: 12, 2: 22, 3: 30},
    6: {'name': '3300', 1: 13, 2: 22, 3: 30},
    7: {'name': '4456', 1: 14,        3: 35},
    8: {'name': '9899',        2: 22, 3: 35},
}
df2=pd.DataFrame.from_dict(d).transpose().set_index('name')
df2

我想删除所有重复的具有不同名称的行,所以我不会删除这些行


            1    2   3
name              
1000       10   20  30    
1000       10   20  30    
2000       11   21  30    
6788       11   21  30    
0909       12   22  30
3300       13   22  30
4456       14  NaN  35
9899      NaN   22  35

因为它们具有相同的名称,但是我想删除它们,因为它们具有不同的名称(2000和6788)

1000       10   20  30    
1000       10   20  30    

所以最终的df必须是:

2000       11   21  30    
6788       11   21  30 

我尝试过


            1    2   3
name              
1000       10   20  30    
1000       10   20  30    
0909       12   22  30
3300       13   22  30
4456       14  NaN  35
9899      NaN   22  35

,但所有重复的行都将被删除,即使是相同名称的行也将被删除。我不知道在删除行的过程中如何比较名称。

1 个答案:

答案 0 :(得分:2)

所以就您而言

df2.reset_index(inplace=True)

df2[~df2.groupby([1,2,3]).name.transform('nunique').gt(1)]
Out[211]: 
   name    1    2   3
0  1000   10   20  30
1  1000   10   20  30
4  0909   12   22  30
5  3300   13   22  30
6  4456   14  NaN  35
7  9899  NaN   22  35
相关问题