gpt4 book ai didi

python - 在多种条件下比较两个不同大小的数据帧

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:27 25 4
gpt4 key购买 nike

<分区>

每当 DF1 中的 A、B、C 和 D 列与 DF2 匹配时打印“True”(在 DF1 中的新列“Test”中),否则打印“False”。

我的代码:

import pandas as pd
import numpy as np

DF1= pd.DataFrame({'A':['a','a','b','b','b','c','c','d'],
'A1':['a11','a11','b11','b11','c11','c11','c11','d11'],
'B':['a1','a2','b1','b2','b3','c1','c2','d1'],
'C':[1,0,np.nan,2,3,1,3,5],
'D':[2.5,4.3,7.2,13.1,3.0,6.2,3.8,78.5]})

DF2= pd.DataFrame({'A':['a','b','b','c','c'],
'B':['a1','b1','b3','c1','c2'],
'C':[1,np.nan,3,1,3],
'D':[2.5,7.2,14.5,6.2,59.2]})

a_s = DF1['A'].unique().tolist()
b_s = DF1['B'].unique().tolist()
c_s = DF1['C'].unique().tolist()

for i in a_s:
for j in b_s:
for k in c_s:

a1=DF1.loc[(DF1.A==i) & (DF1.B==j) & (DF1.C==k),'D'].values
b1=DF2.loc[(DF2.A==i) & (DF2.B==j) & (DF2.C==k),'D'].values

if (len(a1)!=0) & (len(b1)!=0):

if a1==b1:
DF1.loc[(DF1.A==i) & (DF1.B==j) & (DF1.C==k),'Test'] = "True"
else:
DF1.loc[(DF1.A==i) & (DF1.B==j) & (DF1.C==k),'Test'] = "False"

结果:

    A   A1  B   C   D   Test
0 a a11 a1 1.0 2.5 True
1 a a11 a2 0.0 4.3 NaN
2 b b11 b1 NaN 7.2 NaN
3 b b11 b2 2.0 13.1 NaN
4 b c11 b3 3.0 3.0 False
5 c c11 c1 1.0 6.2 True
6 c c11 c2 3.0 3.8 False
7 d d11 d1 5.0 78.5 NaN

问题:

<强>1。代码很慢。
2. 当我必须测试更多列(比如 15 列)时,很难扩展代码。

编辑:问题寻找答案:

    A   A1  B   C   D   Test
0 a a11 a1 1.0 2.5 True
1 a a11 a2 0.0 4.3 False
2 b b11 b1 NaN 7.2 True
3 b b11 b2 2.0 13.1 False
4 b c11 b3 3.0 3.0 False
5 c c11 c1 1.0 6.2 True
6 c c11 c2 3.0 3.8 False
7 d d11 d1 5.0 78.5 False

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