有没有办法在不使用笛卡尔积的情况下加入两个具有共同重复索引的Pandas数据帧? E.g:
df1 = pd.DataFrame(data={'event':['A','C','D']}, index=[1.,3.,3.])
df2 = pd.DataFrame(data={'event':['B','C']}, index=[2.,3.])
注意事件C
记录在两个帧中,C
和D
都具有相同的索引值(时间戳)。
df1.join(df2,how='outer',lsuffix='1',rsuffix='2')
给出:
event1 event2
1.0 A NaN
2.0 NaN B
3.0 C C
3.0 D C
(C
,C
)和(D
,C
)行是C
和D
在{的笛卡尔积{1}}和df1
中的C
。我希望第4行只是(df2
,D
),因为NaN
只出现在D
而不出现在df1
中,即:
df2
答案 0 :(得分:3)
您需要在第二个merge
指数列上cumcount
:
i, j = [
x.set_index(x.groupby(level=0).cumcount(), append=True) for x in (df1, df2)
]
i.merge(
j,
left_index=True,
right_index=True,
how='outer',
suffixes=('1', '2')
).reset_index(level=1, drop=True)
event1 event2
1.0 A NaN
2.0 NaN B
3.0 C C
3.0 D NaN