有条件地删除相同对的熊猫列

时间:2019-04-03 22:15:56

标签: python pandas numpy

我的熊猫数据框比较大(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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

首先,我们使用np.sort进行水平排序,然后将groupbymax函数一起使用,以获取第一,第二个唯一值的最大值:

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