每天创建一个新行 (pd.date_range) - 合并、加入还是合并?
Create a new row for each day (pd.date_range) - Merge, Join or Concat?
我正在尝试通过“乘以”另外两个来创建数据框。
让我向您展示我尝试过的事情。
1 - 从数据范围创建数据框
df_dates = pd.DataFrame({'date_prediciton':pd.date_range(start='2021-08-01', end='2021-08-31', freq='W-SUN')})
df_dates.head()
date_prediciton
0 2021-08-01
1 2021-08-08
2 2021-08-15
3 2021-08-22
4 2021-08-29
2 - 创建客户数据框
client = ['101', '102', '103', '104']
df_clients = pd.DataFrame(data=client, columns=['client'])
df_clients.head()
client
0 101
1 102
2 103
3 104
3 - 然后需要“相乘”(这可能不是正确的表达方式),每个客户端到日期范围
您可以使用 pd.MultiIndex.from_product
来创建两者的笛卡尔积:
print (pd.MultiIndex.from_product([client, df_dates["date_prediciton"]]).to_frame(index=0, name=["client", "date"]))
client date
0 101 2021-08-01
1 101 2021-08-08
2 101 2021-08-15
3 101 2021-08-22
4 101 2021-08-29
5 102 2021-08-01
6 102 2021-08-08
7 102 2021-08-15
8 102 2021-08-22
9 102 2021-08-29
10 103 2021-08-01
11 103 2021-08-08
12 103 2021-08-15
13 103 2021-08-22
14 103 2021-08-29
15 104 2021-08-01
16 104 2021-08-08
17 104 2021-08-15
18 104 2021-08-22
19 104 2021-08-29
我正在尝试通过“乘以”另外两个来创建数据框。 让我向您展示我尝试过的事情。
1 - 从数据范围创建数据框
df_dates = pd.DataFrame({'date_prediciton':pd.date_range(start='2021-08-01', end='2021-08-31', freq='W-SUN')})
df_dates.head()
date_prediciton
0 2021-08-01
1 2021-08-08
2 2021-08-15
3 2021-08-22
4 2021-08-29
2 - 创建客户数据框
client = ['101', '102', '103', '104']
df_clients = pd.DataFrame(data=client, columns=['client'])
df_clients.head()
client
0 101
1 102
2 103
3 104
3 - 然后需要“相乘”(这可能不是正确的表达方式),每个客户端到日期范围
您可以使用 pd.MultiIndex.from_product
来创建两者的笛卡尔积:
print (pd.MultiIndex.from_product([client, df_dates["date_prediciton"]]).to_frame(index=0, name=["client", "date"]))
client date
0 101 2021-08-01
1 101 2021-08-08
2 101 2021-08-15
3 101 2021-08-22
4 101 2021-08-29
5 102 2021-08-01
6 102 2021-08-08
7 102 2021-08-15
8 102 2021-08-22
9 102 2021-08-29
10 103 2021-08-01
11 103 2021-08-08
12 103 2021-08-15
13 103 2021-08-22
14 103 2021-08-29
15 104 2021-08-01
16 104 2021-08-08
17 104 2021-08-15
18 104 2021-08-22
19 104 2021-08-29