横向加入DataFrames

时间:2019-06-21 01:40:38

标签: python pandas

我有一个数据框,其中包含按日期索引的数据。因此,索引的日期范围是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万行。

0 个答案:

没有答案