题目不太好,所以我试着描述一下我要找的东西。 如果您想先看到一些代码,这是可行的,但需要的时间太长(我的df“Test”的长度是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
此数据框为“meterread”:
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为“第16项”:
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
我希望输出文件是“Test”中的一个新列:
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”中找到与“Test”中的SA\u ID匹配的行。 4.使用这些行和列从“Item16”中提取特定月份的DA状态。捆扎、NaN或其他。 5.将DA状态分配给“Test”中的新列,标记为LSE
正如我所说,代码可以工作,但它需要很长的时间(22e6行!真的,乘以3)
目前没有回答
相关问题 更多 >
编程相关推荐