我有一个数据框,其中包含按日期索引的数据。因此,索引的日期范围是6-1到6-18。
我需要做的是根据日期执行“枢轴”或水平合并。
例如,假设今天是6-18。我需要遍历此数据框,并找到6-18的日期,基本上将它们水平旋转/加入同一数据框。
预期的输出(1表示那里有数据,0表示空/ NaN): 加入之前,df:
date | x | y | z
6-15 | 1 | 1 | 1
6-15 | 2 | 2 | 2
6-18 | 3 | 3 | 3
6-18 | 3 | 3 | 3
在6-18上加入df:
date | x | y | z | x (6-18) | y (6-18) | z (6-18)
6-15 | 1 | 1 | 1 | 0 | 0 | 0
6-15 | 1 | 1 | 1 | 0 | 0 | 0
6-18 | 1 | 1 | 1 | 1 | 1 | 1
6-18 | 1 | 1 | 1 | 1 | 1 | 1
当我使用附加,联接或合并时,我得到的是:
date | x | y | z | x (6-18) | y (6-18) | z (6-18)
6-15 | 1 | 1 | 1 | 0 | 0 | 0
6-15 | 1 | 1 | 1 | 0 | 0 | 0
6-18 | 1 | 1 | 1 | 0 | 0 | 0
6-18 | 1 | 1 | 1 | 0 | 0 | 0
6-18 | 1 | 1 | 1 | 1 | 1 | 1
6-18 | 1 | 1 | 1 | 1 | 1 | 1
我所做的是使用loc将所需的日期提取到新的数据框中。
df_daily = df_metrics.loc[str(_date_map['daily']['start'].date())]
df_daily.columns = [str(cols) + " (Daily)" if cols in metric_names else cols for cols in df_daily.columns]
然后将其加入主df:
df = df.join(df_daily, lsuffix=' (Daily)', rsuffix=' (Monthly)').reset_index()
当我尝试加入或合并时,数据集会变得很大,因为我假设它正在对每一行进行比较。因此,如果1行的1个日期不匹配,它将使用NaN创建一个新行。
我的数据集从3万行变为280万行。