pandas DataFrame高效程式設計方法: 根據多列的值做判斷,生成新的列值,其中多列的值是包含多個值的資料型別
阿新 • • 發佈:2018-11-15
一.遇到的問題描述:
我遇到問題的資料比較複雜,下面以比較簡單的資料為例說明問題,所以這些資料的含義是沒有意義的,可以忽略資料的的具體意義。資料如下所示:
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,這樣就會有三層迴圈,速度非常慢。