我有一个像这样的数据框:
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
,但所有重复的行都将被删除,即使是相同名称的行也将被删除。我不知道在删除行的过程中如何比较名称。
答案 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