我有两个数据框coinnova_array_df(1)和sf_array_df(2)。我需要创建一个列表,其中包含(1)中的每个记录的(2)行中的名字和姓氏值匹配的行号,并且组合必须在(2)中唯一)。我到目前为止可以产生的代码显示在下面:
x_list = \
[z \
for zz in coinnova_array_df['row_in_i'] \
for z in sf_array_df['row_in_j'] \
if sf_array_df[ \
(sf_array_df['LastName'] == coinnova_array_df.loc[zz, 'COINNOVA results__familyName']) & \
(sf_array_df['FirstName'] == coinnova_array_df.loc[zz, 'COINNOVA results__givenName']) \
].shape[0] == 1 \
else 10000
]
我的问题是出现以下错误,并且似乎无法确定问题的根源:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-113-790dea94331a> in <module>
7 ].shape[0] == 1 \
8 else 1000000 \
----> 9 for zz in range(0, coinnova_array_df.shape[0]-1)
10 for z in range(0, sf_array_df.shape[0]-1) \
11 ]
<ipython-input-113-790dea94331a> in <listcomp>(.0)
8 else 1000000 \
9 for zz in range(0, coinnova_array_df.shape[0]-1)
---> 10 for z in range(0, sf_array_df.shape[0]-1) \
11 ]
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\ops.py in wrapper(self, other, axis)
1251 # as it will broadcast
1252 if other.ndim != 0 and len(self) != len(other):
-> 1253 raise ValueError('Lengths must match to compare')
1254
1255 res_values = na_op(self.values, np.asarray(other))
ValueError: Lengths must match to compare
能不能帮我解决这个问题,或者如果不能解决,请指出正确的方向吗?
谢谢!
编辑21/02/2019
描述结果太大,因此我将尝试另一种方法。数据帧的组成如下:
coinnova_array_df
shape: (161, 5)
variables:
"COINNOVA results__familyName" np.array
"COINNOVA results__givenName" np.array
"COINNOVA results__email" np.array
"row_in_i" integer
"row_in_j" integer
sf_array_df
shape: (7127, 4)
"LastName" np.array
"FirstName" np.array
"Primary_Email_BI__c" np.array
"row_in_j" integer
变量被命名为“ familyName”,“ FirstName”等,因为np.arrays包含实际名称/姓氏/电子邮件中各个字符的ASCII码。我试图通过将字符串转换为数字并在匹配中使用数字表示形式,来找到一种加快我开发的字符串匹配脚本的方法。