将值的第一个实例从一个数据框拉到另一个

时间:2018-10-12 23:58:49

标签: python pandas numpy

标题不是很好,所以我将尽力描述我要寻找的内容。 如果您想先看一些代码,可以使用它,但是会花费太长的时间(我的df“测试”的长度为22e6行)。

此df为“测试”:

    SA      DATE        MTRCYCCD
0   123     2015-07-31  H
1   123     2015-12-27  H
2   123     2015-06-09  H
3   123     2015-07-01  H
4   123     2015-12-28  H

此df是“读表”:

    Serial  KWH_DEC_2014    KWH_JAN_2015 
0   B       11/24/2014      12/24/2014
1   C       11/25/2014      12/26/2014
2   D       11/26/2014      12/29/2014
3   F       12/1/2014       12/30/2014
4   H       12/2/2014       12/31/2014

此df为“ Item16”:

    SA_ID   MTRCYCCD    DA_DEC_2014  DA_JAN_2015
0   123     H           BUNDLED      NaN
1   123     H           BUNDLED      NaN         
2   123     H           BUNDLED      NaN
3   123     H           BUNDLED      NaN

我希望输出文件成为“测试”中的新列:

    SA      DATE        MTRCYCCD  LSE
0   123     2015-07-31  H         BUNDLED
1   123     2015-12-27  H         BUNDLED
2   123     2015-06-09  H         BUNDLED
3   123     2015-07-01  H         BUNDLED
4   123     2015-12-28  H         BUNDLED

这是我当前的代码(可以,但是非常慢):

Test['LSE'] = ''
for i in range(len(Test)): 
    t = (meterread[meterread['Serial'] == Test.iloc[i,2]] > Test.iloc[i,1]).iloc[:,1:]
    Item16col = t.columns[t.values.argmax()]
    row = (Item16.index[Item16.iloc[:,0] == Test.iloc[i,0]])
    col = Item16.columns.get_loc('DA_'+Item16col.lstrip('KWH_'))
    Test.iloc[i,3] = Item16.iloc[row,col].values
    print(Test.iloc[i,3],Item16.iloc[row,col].values)

我知道我在这里提交一些虚假命令,特别是遍历数据帧中的行。这就是我需要的帮助-如何进行矢量化处理或以其他方式提高此代码的速度?

代码执行以下操作: 1.在“ meterread”中找到对应于“ Test”中日期的第一个实例的列索引,该日期介于“ meterread”的日期(对于该MTRCYCCD)之间。 2.拉出列名,剥去KWH_并替换为DA_。分配给'col' 3.在“ Item16”中找到与“测试”中的SA_ID与SA匹配的行。 4.使用这些行和列从“ Item16”中提取该特定月份的DA状态。 BUNDLED,NaN或其他。 5.将DA状态分配给“测试”中标记为LSE的新列。

正如我说的那样,代码可以工作,但是需要很长时间(22e6行!实际上是三倍)。

0 个答案:

没有答案