python - 有条件地删除熊猫中相同的列对
问题描述
我有一个有点大的熊猫数据框(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
有任何想法吗?
解决方案
首先我们使用np.sort
水平排序,然后我们使用groupby
withmax
函数来获取 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
推荐阅读
- android - 文档未更改,但被视为已添加到 Firestore Android Studio
- f# - 为什么在这个简单的 F# 示例中没有收集到弱引用?
- python-3.x - 根据python中的条件选择列
- .net - ServicePointManager.DefaultConnectionLimit和system.net connectionManagement maxconnection是什么关系?
- c++ - 向量下标超出范围 Visual Studio C++
- powershell - 查看文件上的元数据变量名称 (Windows 10)
- regex - 年龄检查器 18+ 使用正则表达式
- python - 训练模型后和加载该模型后的准确性差异很大
- arrays - 如何在 linux bash 中减去两个标准输出列表
- javascript - Datalables 对齐在 Highchart 时间轴中不起作用