我正在尝试将维修订单列表放入“每日”数据框,其中包含在商店中开立的维修数量。
The repair table looks like this:
data = [['USA', 2007-01-01, 2007-01-10],
['EUR', 2007-01-01, 2007-01-08],
['ASIA', 2007-01-02, 2007-01-05],
['EUR', 2007-01-07, 2007-0-10]]
columns = ['Location', 'Date In', 'Date Out']
repairs = pd.DataFrame(data, columns=columns)
print(repairs)
我想创建一个数据框,其中包含所有车间以及每天车间中零件的数量。因此输出应如下所示:
locations = repairs['Location'].unique()
dates = pd.date_range(start=2007-01-01, end = 2007-01-11)
locwork = pd.DataFrame(index=dates, columns=locations)
print(locwork)
是否有矢量化的方法来实现这一目标?因为我可以找到的唯一方法是遍历locwork数据框,然后查看修复数据框中有多少行满足条件。但是,由于两个DataFrame的大小(300,000次修复,到2007年1月1日为止),此选项不够快。 我当前的解决方案是(很抱歉隐藏代码,我只想要一个有效的解决方案:
for date in dates:
temp = repairs.loc[(repairs['Date In'] < date) & (repairs['Date Out'] > date)][['Date In',
'Location']]
temp['Date In'] = date
temp = temp.reset_index()
temp = temp.drop(columns=['index'])
locdates = locdates.append(temp)
temp = temp.iloc[0:0]
locdates['Date'] = locdates['Date In']
locdates['Date In'] = 1
locwork = locdates.groupby(['Date', 'Shop']).sum()
locwork = locwork.unstack()\
.fillna(0)\
.reset_index()\
.droplevel(0, axis = 1)
locwork = locwork.set_index(locwork.columns[0])
print(locwork)
什么是更整洁,更Python化的方式来实现这一目标?