gpt4 book ai didi

python - 在 pandas Dataframe 中查找倒数行

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:51 32 4
gpt4 key购买 nike

我有这个数据框,并且只需要保留那些具有 2 列倒数值的行(此处为 numA 和 numB)。

gpm = pd.DataFrame(data={
'id':[1,2,3,4,5,6,7,8,9],
'time':[150315,150315,150315,150315,150315,150315,150315,150315,150315],
'numA':['A','D','C','B','A','C','A','E','D'],
'numB':['B','C','B','A','B','D','B','A','A'],
'antA':['MSPDV','VIELU','RMPC1','MJCIH','PALT2','M2PV3','MACIF','MACIF','VIELU'],
'antB':['BPDV8','0GRI3','SSFDJ','SSFDJ','SSFDJ','CCPG1','0GRI3','SSFDJ','SSFDJ']
})

我只想要其中 numA 列和 numB 列互为倒数的行。也就是说,保留出现 (A,B)、(B,A) 和 (C,D)、(D,C) 对的所有行。

目前,我的解决方案包括制作所有唯一标识符的列表,并遍历每一行以查找实际合作伙伴是否在合作伙伴列表中

它非常慢......(也许是不正确的!)

## here's my code
parties = {}
nums = gpm['numA']+gpm['numB']
for i in nums.unique():
parties[i] = gpm['numB'][gpm['numA'] == i]
parties[i] = gpm['numA'][gpm['numB'] == i]

new_d = gpm.iloc[[0]]
for i in np.arange(1,gpm.shape[0]):
numa = gpm.iloc[i]['numA']
if gpm.iloc[i]['numB'] in parties[numa]:
new_d.append(gpm.iloc[[i]])

任何精明的编码员可以帮助加快速度吗?实际要解析的文件是大约 15GB 的 csv。

谢谢

最佳答案

在您的示例中,我假设 id=3、8 和 9 的行(C,B)、(E,A)和(D,A)是不需要的?如果是这样,可以通过比较 numAnumB 中的值来选择可接受的特定组合,这是一种标准方法:

In [5]: gpm[((gpm['numA'] == 'A') & (gpm['numB'] == 'B')) |
...: ((gpm['numA'] == 'B') & (gpm['numB'] == 'A')) |
...: ((gpm['numA'] == 'C') & (gpm['numB'] == 'D')) |
...: ((gpm['numA'] == 'D') & (gpm['numB'] == 'C'))
...: ]
Out[5]:
id time numA numB antA antB
0 1 150315 A B MSPDV BPDV8
1 2 150315 D C VIELU 0GRI3
3 4 150315 B A MJCIH SSFDJ
4 5 150315 A B PALT2 SSFDJ
5 6 150315 C D M2PV3 CCPG1
6 7 150315 A B MACIF 0GRI3

(将结果分配给new_d)

关于python - 在 pandas Dataframe 中查找倒数行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53300569/

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