如何删除数据集中的重复值:python

2024-03-29 14:21:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过保留具有最高值的项来删除数据集中的重复项。现在我用的是熊猫:

c_maxes = hospProfiling.groupby(['Hospital_ID', 'District_ID'], group_keys=False)\
                .apply(lambda x: x.ix[x['Hospital_employees'].idxmax()])
print c_maxes

c_maxes.to_csv('data/external/HospitalProfilingMaxes.csv')

这样做会导致初始数据集:Hospital_ID,District_ID,Hospital_employees变成{}。在

正在复制用于分组的列。这里有什么错误?在

编辑:

在使用groupby()函数时,将在数据开头添加一个额外的列。列没有名称,它只是所有行的序列号。这里的第二个问题就是答案。我想删除这个额外的专栏,因为我不需要它。我试过了:

hospProfiling.drop(hospProfiling.columns[0], axis=1)

此代码不会删除列。如何才能将其移除?在


Tags: csv数据lambdaidfalsegroupkeysix
2条回答

我认为你需要:

hospProfiling.loc[hospProfiling.groupby(['Hospital_ID', 'District_ID'])['Hospital_employees']
                               .idxmax()]

我对另一个答案感到非常惊讶,我做了一些研究,如果函数^{}是否无用:

样品:

^{pr2}$

主要区别在于如何处理另一列,如果使用max它将返回每列的最大值-这里是Hospital_employees和{}:

c_maxes = hospProfiling.groupby(['Hospital_ID','District_ID'],as_index = False).max()
print (c_maxes)
  Hospital_ID District_ID  Hospital_employees   Name  Val
0           A           F                  41  Annie    7
1           A           M                  56    Sam  200
2           B           F                  28  Julie    9
3           B           M                  70  James   20

c_maxes = hospProfiling.groupby(['Hospital_ID','District_ID'],as_index = False)
                       .agg({'Hospital_employees': max})
print (c_maxes)
  Hospital_ID District_ID  Hospital_employees
0           A           F                  41
1           A           M                  56
2           B           F                  28
3           B           M                  70

函数idxmax返回另一列中最大值的索引:

print (hospProfiling.groupby(['Hospital_ID', 'District_ID'])['Hospital_employees'].idxmax())
A            F               1
             M              10
B            F              11
             M               2
Name: Hospital_employees, dtype: int64

然后您只需按^{}选择DataFrame

c_maxes = hospProfiling.loc[hospProfiling.groupby(['Hospital_ID', 'District_ID'])['Hospital_employees']
                       .idxmax()]
print (c_maxes)
   District_ID Hospital_ID  Hospital_employees   Name  Val
1            F           A                  41  Annie    7
10           M           A                  56   Alan    6
11           F           B                  28  Julie    9
2            M           B                  70   Fred   14

为什么不使用groupbymax方法?在

hopsProfiling.groupby(['Hospital_ID','District_ID'],as_index = False).max()

如果您碰巧有三列以上的列,请将max替换为agg:

^{pr2}$

相关问题 更多 >