用于循环更换的熊猫

时间:2016-12-05 12:28:16

标签: python pandas

我对大熊猫很新,并想知道是否有人可以提供以下帮助;

我正在尝试使用pandas在数据帧上逐行循环,并且对于每一行,我想将该行与另一个数据帧的每一行(大致为len 7)进行比较。

数据帧相当大(索引是从10月到10月的10分钟频率)和嵌套的for循环我需要一个年龄来运行(大约20分钟);

    frame['Group1 ON With Exception'] = ''
    for i in range(len(frame)):
        for j in range(len(grp1_extpn_tbl)):
            if ((frame.ix[i,'T01\n(kWh) ':'T22\n(kWh) ']>1) == (grp1_extpn_tbl.loc[j]>0)).all():    
                frame.ix[i,'Group1 ON With Exception'] = ''
                break
            else:            
                frame.ix[i,'Group1 ON With Exception'] = 'NOT VALID GROUP1 DATA'

显然,对于大熊猫,关键是要避免循环,所以我想出了使用嵌套的np.where,这大大加快了速度(比如3分钟)。问题是它看起来是一个非常繁琐的代码块,我想知道是否有另一种替代方案,甚至比这更多地压缩这个代码块? ;

    frame['Group1 ON With Exception'] = ''
    frame['Group1 ON With Exception'] =  np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[0] > 0)).all(), axis=1),'',
                                         np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[1] > 0)).all(), axis=1),'',
                                         np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[2] > 0)).all(), axis=1),'',
                                         np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[3] > 0)).all(), axis=1),'',
                                         np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[4] > 0)).all(), axis=1),'',
                                         np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[5] > 0)).all(), axis=1),'',
                                         np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[6] > 0)).all(), axis=1),'','NOT VALID GROUP1 DATA')))))))

希望以上是足够的信息,任何帮助都将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分:0)

而不是使用i,j来运行数据帧,而是使用iterrows()。

for index, row in df1.iterrows():
    if row['column'] in df2['column_to_compare_to']:
        do_something()
    else:
        do_something_else()

或者,为什么不循环遍历len 7的小数据帧并从大数据帧中选择?如果select变为空,则执行某些操作,如果select返回结果,则执行某些操作。希望有所帮助!