为什么我的问题与主题相同的其他人(合并/合并/加入)不同?
我正在尝试合并2个Pandas数据框。两者均通过时间戳编制索引,但日期不同。我想将两者合并而不重复值,并用NaN填补空白。
某些框架的长度不同。
我有2个数据帧,如下所示:
- name: Create the expected hash
set_fact:
my_hash: >-
{{
my_hash
| default({})
| combine({ item.availability_zone: item.subnet_id })
}}
loop: "{{ subnets }}"
- name: Print result
debug:
var: my_hash
c1b28dc
date
2016-02-01 291
2016-02-01 159
2016-02-02 322
2016-02-03 31
2016-02-10 8
但是当我合并它们时,我得到了:
956773a
date
2016-02-01 350
2016-02-01 27
2016-02-02 11
2016-02-02 8
2016-02-02 25
我想要的是:
c1b28dc 956773a
date
2016-02-01 291.0 350.0
2016-02-01 291.0 27.0
2016-02-01 159.0 350.0
2016-02-01 159.0 27.0
2016-02-02 322.0 11.0
2016-02-02 322.0 8.0
2016-02-02 322.0 25.0
我正在尝试使用concat,join和merge的不同方法,但是没有任何改善。
c1b28dc 956773a
date
2016-02-01 291.0 350.0
2016-02-01 159.0 27.0
2016-02-02 322.0 11.0
2016-02-02 NaN 8.0
2016-02-02 NaN 25.0
2016-02-03 31 NaN
2016-02-10 8 NaN
有帮助吗?
答案 0 :(得分:1)
我在这里用cumcount
分配了一个新密钥来帮助merge
df1=df1.assign(key=df1.groupby(level=0).cumcount()).reset_index()
df2=df2.assign(key=df2.groupby(level=0).cumcount()).reset_index()
df=df1.merge(df2,how='right')
# you can drop the columns by df=df.drop('key',1)
date c1b28dc key 956773a
0 2016-02-01 291.0 0 350
1 2016-02-01 159.0 1 27
2 2016-02-02 322.0 0 11
3 2016-02-02 NaN 1 8
4 2016-02-02 NaN 2 25
更新
df1.merge(df2,how='outer').sort_values('date').drop('key',1)
date c1b28dc 956773a
0 2016-02-01 291.0 350.0
1 2016-02-01 159.0 27.0
2 2016-02-02 322.0 11.0
5 2016-02-02 NaN 8.0
6 2016-02-02 NaN 25.0
3 2016-02-03 31.0 NaN
4 2016-02-10 8.0 NaN