创建一个数据框,其中包含每个 sku 范围内的所有日期
Create a data frame that includes all dates between a range for each sku
我正在尝试为 3 个国家/地区和 9 个 SKU 中的每一个创建一个数据框,其中包含“1/1/2019”和“28/02/2022”之间的所有日期。
我遵循这种方法好几天了:
days = pd.DataFrame(pd.date_range(start='1/1/2019', end='28/02/2022',freq='D'))
for i in range(26):
days=days.append(pd.DataFrame(pd.date_range(start='1/1/2019', end='28/02/2022',freq='D')))
days.rename(columns={0:'Date'},inplace=True)
days.reset_index(inplace=True,drop=True)
此数据框给出了一个包含 31185 行的列,对应于该范围之间的 1155 天乘以 27 (3x9)。
现在我想分配国家名称和 sku 名称。为了填充我遵循这种手动方法的国家,但加载需要一段时间。有更聪明的方法吗?我想对 9 个 SKU 执行相同的操作。
for i in range(0,10395):
days.loc[i,'country']= 'Austria'
for i in range(10395,20790):
days.loc[i,'country']= 'Germany'
for i in range(20790,31185):
days.loc[i,'country']= 'Switzerland'
提前致谢!
尝试days.loc[range(0,10395),'country']= 'Austria'
更有效的方法是 cross-multiply 将 Date
、Country
和 SKU
的 3 个数组放在一起:
df = pd.MultiIndex.from_product([
pd.date_range(start='1/1/2019', end='28/02/2022', freq='D'),
['Austria', 'Germany', 'Switzerland'],
[f'SKU {i}' for i in range(9)]
], names=['Date', 'Country', 'SKU']).to_frame(index=False)
我正在尝试为 3 个国家/地区和 9 个 SKU 中的每一个创建一个数据框,其中包含“1/1/2019”和“28/02/2022”之间的所有日期。 我遵循这种方法好几天了:
days = pd.DataFrame(pd.date_range(start='1/1/2019', end='28/02/2022',freq='D'))
for i in range(26):
days=days.append(pd.DataFrame(pd.date_range(start='1/1/2019', end='28/02/2022',freq='D')))
days.rename(columns={0:'Date'},inplace=True)
days.reset_index(inplace=True,drop=True)
此数据框给出了一个包含 31185 行的列,对应于该范围之间的 1155 天乘以 27 (3x9)。 现在我想分配国家名称和 sku 名称。为了填充我遵循这种手动方法的国家,但加载需要一段时间。有更聪明的方法吗?我想对 9 个 SKU 执行相同的操作。
for i in range(0,10395):
days.loc[i,'country']= 'Austria'
for i in range(10395,20790):
days.loc[i,'country']= 'Germany'
for i in range(20790,31185):
days.loc[i,'country']= 'Switzerland'
提前致谢!
尝试days.loc[range(0,10395),'country']= 'Austria'
更有效的方法是 cross-multiply 将 Date
、Country
和 SKU
的 3 个数组放在一起:
df = pd.MultiIndex.from_product([
pd.date_range(start='1/1/2019', end='28/02/2022', freq='D'),
['Austria', 'Germany', 'Switzerland'],
[f'SKU {i}' for i in range(9)]
], names=['Date', 'Country', 'SKU']).to_frame(index=False)