【问题标题】:Conditional drop of identical pairs of columns in pandas有条件地删除熊猫中相同的列对
【发布时间】:2019-04-04 06:21:56
【问题描述】:

我有一个有点大的 pandas 数据框 (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

有什么想法吗?

【问题讨论】:

标签: python pandas numpy


【解决方案1】:

首先我们使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2017-05-16
    • 1970-01-01
    • 2016-12-25
    • 2021-12-18
    相关资源
    最近更新 更多