pandas DataFrame高效编程方法: 根据多列的值做判断,生成新的列值,其中多列的值是包含多个值的数据类型

一.遇到的问题描述:

我遇到问题的数据比较复杂,下面以比较简单的数据为例说明问题。数据一共有两列,第一列为城市名组成的列表,第二列为城市名及对应人口数组成的字典。所有数据转换成DataFrame格式如下所示:

import numpy as np
import pandas as pd
data = {'city': [{'Beijing':1, 'Shanghai':2,"lanzhou":7}, {'Guangzhou':3, 'Shenzhen':4},{'Hangzhou':5, 'Chongqing':6}],
       'word': [["Beijing","Shanghai"],["Guangzhou","Hangzhou"],["Chongqing"]],
       'population': [2100, 2300, 1000]}
frame = pd.DataFrame(data, columns = ['word', 'city', 'population'])
frame

我想要统计word的每行数据中每个元素在city的对应行中是否存在,如果存在将对应的字典里面的键值赋给它,并生成一个新的字典。

二.解决方法:

import ast
def get_title_dict(a,b):
    title_cut_dict={}
    for i in a:
        if i in b:
            title_cut_dict[i]=b[i]
    return title_cut_dict
frame["test"]=frame.apply(lambda x: get_title_dict(x.word, x.city), axis = 1)
frame

结果如下所示:

这个问题还有另外一种处理方式,就是先遍历frame的每行,然后遍历该行中的word,然后遍历city,这样就会有三层循环,速度非常慢。

三.参考资料:

https://blog.csdn.net/qq_30565883/article/details/79464266

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skj1995

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值