在数据框中将列表中的值与列值进行匹配,并提取相邻的值

时间:2019-04-18 20:12:27

标签: python pandas numpy

我有一个列表

like_zips = [0, 1001, 1002, 1005, 1007, 1010, 1013, 1020, 1027, 1028, 1030,...]

和两列的数据框:

   zip     AGI
    0   11004990.0
1   0   17658446.0
2   0   15963943.0
3   0   14294375.0
4   0   27387096.0
5   0   22652783.0

我正在尝试将列表中的元素与其在DF中的出现进行匹配,因此在zips(列表元素和列元素)匹配的地方,我希望对所有与列表元素匹配的AGI值求平均值,然后附加特定列表元素作为关键字,其现在的平均值作为字典中的值

所以理想情况是这样的:

matched_zip_means = {}

for i in like_zips:
    if IRS_AGI_only['zipcode'].isin(like_zips) == True:
        a = IRS_AGI_only.loc[IRS_AGI_only['zip'] == i, 'AGI'].mean()
        matched_zip_means[i] = a

print(matched_zip_means)

我知道我可以使用groupby,但是列表和数据帧非常大,我想知道是否存在计算上的“非自杀性”替代方案?

编辑:

根据要求,理想的输出应如下所示:

zip_dict = [0 : "mean AGI value of 0", 1001 : "mean AGI of 1001" ... etc]

编辑2:

matched_zip_means = {}

for i in like_zips:
    if i in IRS_AGI_only['zipcode']:
        a = round(IRS_AGI_only.loc[IRS_AGI_only['zipcode'] == i, 'A00100'].mean(), 2)
        matched_zip_means[i] = a

这可行,但是我想知道是否有任何更快的方法?这花了大约30秒

0 个答案:

没有答案