python / pandas - 想要删除嵌套循环以改善运行时间

时间:2016-01-05 17:56:00

标签: python loops pandas indexing vectorization

鉴于以下内容:

import pandas as pd
from pandas import *
from numpy import *

df = pd.DataFrame(columns=['A', 'B', 'C'])
df['A'] = [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
df['B'] = ['a','b','c','a','b','c','a','b','c','a','b','c','a','b','c']

list_a = list(df['A'].unique())
list_b = list(df['B'].unique())

我想删除以下循环以加快下一步......

for i in list_a:
    for j in list_b:
        df.ix[(df['A']==i) & (df['B']==j), 'C'] = i*j

超过数万行,这非常慢。感谢您的许多见解。

请注意 - i * j是无关紧要的 - 我从查找表中拉出=的另一面,这会使示例复杂化。

编辑:我认为这是一个基于list_a和list_b中的项目的索引问题,因此我可以在前面提到的ref表中搜索并写入过滤的df ['C']。再次感谢。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

df['C'] = df['B'] * df['A']

这将对*df['A']

中的匹配对应用df['B']的元素操作