1.数据样式和目标
1.1 数据样式
A表:
time | value |
1996-1-1 | 111 |
1996-1-2 | 222 |
1996-1-6 | 333 |
1996-1-10 | 444 |
B表:
time | value |
1996-1-2 | 555 |
1996-1-5 | 666 |
1996-1-11 | 777 |
1996-1-12 | 888 |
1.2 拼接目标样式:
time | value_A | value_B |
1996-1-1 | 111 | null |
1996-1-2 | 222 | 555 |
1996-1-5 | null | 666 |
1996-1-6 | 333 | null |
1996-1-10 | 444 | null |
1996-1-11 | null | 777 |
1996-1-12 | null | 888 |
2. 拼接方法
我尝试了pd.merge()和pd.concat()这两种方法,发现pd.merge()才是我想要的拼接形式,按索引拼接;而pd.concat()属于硬性拼接,只会把双方的第一行第二行拼接一起。
2.1 pd.merge()
df = pd.merge(left=left_df, right=right_df, how='outer', on='time')
拼接结果为:
time | value_A | value_B |
1996-1-1 | 111 | null |
1996-1-2 | 222 | null |
1996-1-6 | 333 | null |
1996-1-10 | 444 | null |
1996-1-2 | null | 555 |
1996-1-5 | null | 666 |
1996-1-11 | null | 777 |
1996-1-12 | null | 888 |
2.2 df.sort_index()
为了将上述数据处理成我们想要的格式,我尝试了df.groupby(),发现只能是DataframeGroupBy对象,而非我们想要的Dataframe,转换非常麻烦;后来发现了df.sort_index()方法,按照索引排序,解决!
df = df.sort_index()
代码结果为:
time | value_A | value_B |
1996-1-1 | 111 | null |
1996-1-2 | 222 | 555 |
1996-1-5 | null | 666 |
1996-1-6 | 333 | null |
1996-1-10 | 444 | null |
1996-1-11 | null | 777 |
1996-1-12 | null | 888 |