我正在尝试合并两个weelly日期框,每个日期框由一列组成,但长度不同
我可以知道如何合并它们,维护“周”索引吗
[df1]
Week Coeff1
1 -0.456662
1 -0.533774
1 -0.432871
1 -0.144993
1 -0.553376
... ...
53 -0.501221
53 -0.025225
53 1.529864
53 0.044380
53 -0.501221
[16713 rows x 1 columns]
[df2]
Week Coeff
1 0.571707
1 0.086152
1 0.824832
1 -0.037042
1 1.167451
... ...
53 -0.379374
53 1.076622
53 -0.547435
53 -0.638206
53 0.067848
[63265 rows x 1 columns]
我尝试过以下代码:
df3 = pd.merge(df1, df2, how='inner', on='Week')
df3 = df3.drop_duplicates()
df3
但是它给了我一个新的df(df3),它有13386431行×2列
期望的结果:一个新的df有3列(week,coeff1,coeff2),因为df2更长,我希望在coeff1中有一些NAN来填补空白
我假设您的输出应该是这样的:
不过,不要介意实际数字。 问题是,如果在周上进行联接(无论是左联接还是内联接),就无法实现这一点,这是因为周索引不是唯一的。 因此,在左连接上,pandas将在df1中的每一行上连接所有Coeff2值,其中df1.Week==1。这就是为什么会有数百万行
稍后我会尝试给你一个解决方法,但也许这有助于你从另一个角度思考这个问题
现在是晚些时候:
实际上,您要做的是“每周”连接数据帧。 通过每周迭代,创建一个df_子集[week],通过axis=1连接df1[week]和df2[week],然后在axis=0上连接所有这些子集,可以实现这一点:
最后一次重置索引是可选的,但我还是建议您这样做
根据pandas的mergedocumentation,可以这样使用merge:
你要找的是左连接。但是,默认选项是内部联接。您可以通过传递不同的how参数来更改此设置:
请注意,这将使这些行保留在较大的df中,并在与较短的df合并时将NaN分配给它们
根据您上次对该问题的评论,您可能希望连接而不是合并两个数据帧:
生成的
DataFrame
应该有63265
行,并且需要一些工作才能使其达到所需的格式(删除添加的索引列,重命名其余的列,等等),但是pd.concat
应该是一个好的开始相关问题 更多 >
编程相关推荐