我的熊猫数据框比较大(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
有什么想法吗?
答案 0 :(得分:2)
首先,我们使用np.sort
进行水平排序,然后将groupby
与max
函数一起使用,以获取第一,第二个唯一值的最大值:
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