【发布时间】:2018-04-24 20:46:10
【问题描述】:
我有一个布局如下的 DF。实际表在 +10m 行的范围内,因此在较大的一侧。
df = pd.DataFrame({'id1' : ['12a', '13b', '14c', '15d', '16e', '18g', '17f', '19h']
,'id2' : ['16e', '17f', '18g', '19h','12a', '14c','13b', '15d']
,'var1' : [i for i in range(8)]
,'var2' : list(np.random.randint(100, size = 8))
,'var3' : [1, 2, np.nan, 3, 2, np.nan, np.nan, 34]
})
>>> df
id1 id2 var1 var2 var3
0 12a 16e 0 66 1.0
1 13b 17f 1 9 2.0
2 14c 18g 2 48 NaN
3 15d 19h 3 13 3.0
4 16e 12a 4 67 2.0
5 18g 14c 5 88 NaN
6 17f 13b 6 92 NaN
7 19h 15d 7 99 34.0
我想要的是减少成对出现的 DF 中的 ID,例如id1 索引第 0 行和 id2 索引第 4 行。所有 id 都存在于两行中,我需要检查每一行并删除其中一行。目前我有一个解决方案,它是行迭代并且有点慢。
请注意,由于需要检查所有 ID(id1 与 id2),因此不能只删除 DF 的下部(索引第 4 行及以后)。
决赛桌将如下所示:
id1 id2 var1 var2 12a 16e 66 1.0 13b 17f 9 2.0 14c 18g 48 南 15 天 19 小时 13 3.0所有“快速”的解决方案都非常受欢迎。
【问题讨论】:
-
我不明白。结果中
var1的值来自哪里?为什么var2列消失了?删除两个匹配行中的哪一个是否重要? -
对代码进行了编辑,添加了执行的 DF 输出,给定执行和 np.random.randit 函数,数字发生了变化。对此感到抱歉