首页 > 解决方案 > 有条件地删除熊猫中相同的列对

问题描述

我有一个有点大的熊猫数据框(100,000x9)。前两列是与值关联的名称的组合(两侧)。我想删除与给定组合关联的较低值。

我还没有尝试过任何事情,因为我不确定如何解决这个问题。我的第一印象是我需要在数据框上使用apply函数,但我需要选择'first'和'second'的每个组合,比较它们然后删除该行。

df = pd.DataFrame(np.array([['John','Mary',5],['John','Mark',1],  ['Mary','John',2], ['Mary','Mark',1], ['Mark','John',3], ['Mark','Mary',5]]), columns=['first','second','third'])

df

first   second  third
0   John    Mary    5
1   John    Mark    1
2   Mary    John    2
3   Mary    Mark    1
4   Mark    John    3
5   Mark    Mary    5

我的目标是得到这个数据框

df_clean = pd.DataFrame(np.array([['John','Mary',5], ['Mark','John',3], ['Mark','Mary',5]]), columns=['first','second','third'])

df_clean

first   second  third
0   John    Mary    5
1   Mark    John    3
2   Mark    Mary    5

有任何想法吗?

标签: pythonpandasnumpy

解决方案


首先我们使用np.sort水平排序,然后我们使用groupbywithmax函数来获取 first、second 的每个唯一值的最大值:

df[['first', 'second']] = np.sort(df[['first', 'second']], axis=1)

print(df.groupby(['first', 'second']).third.max().reset_index())
  first second third
0  John   Mark     3
1  John   Mary     5
2  Mark   Mary     5

推荐阅读