gpt4 book ai didi

python - 减少多列中的多个ID

转载 作者:行者123 更新时间:2023-12-01 09:30:38 25 4
gpt4 key购买 nike

我有一个布局如下的 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 都存在于两行中,我需要检查每一行并删除其中一行。目前我有一个解决方案,它是行迭代并且有点慢。

请注意,不能只删除 DF 的下半部分(索引行 4 及以后),因为需要检查所有 ID(id1id2)。

决赛 table 将如下所示:

id1 id2  var1 var212a 16e  66   1.013b 17f  9    2.014c 18g  48   NaN15d 19h  13   3.0

所有“快速”的解决方案都受到高度评价。

最佳答案

我相信可以对每行的列进行排序,并按DataFrame.duplicated仅过滤第一行与 boolean indexing并通过 ~ 反转掩码:

np.random.seed(2018)

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 = df[~pd.DataFrame(np.sort(df[['id1', 'id2']], 1)).duplicated()]
print (df)
id1 id2 var1 var2 var3
0 12a 16e 0 62 1.0
1 13b 17f 1 59 2.0
2 14c 18g 2 58 NaN
3 15d 19h 3 72 3.0

详细信息:

print (pd.DataFrame(np.sort(df[['id1', 'id2']], 1)))
0 1
0 12a 16e
1 13b 17f
2 14c 18g
3 15d 19h
4 12a 16e
5 14c 18g
6 13b 17f
7 15d 19h

print (~pd.DataFrame(np.sort(df[['id1', 'id2']], 1)).duplicated())
0 True
1 True
2 True
3 True
4 False
5 False
6 False
7 False
dtype: bool

关于python - 减少多列中的多个ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50001525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com