python - 连接两个具有共同、重复索引的 Pandas 数据框,而不进行笛卡尔积

标签 python pandas

有没有一种方法可以连接两个具有共同重复索引的 Pandas 数据框,而无需进行笛卡尔积?例如:

df1 = pd.DataFrame(data={'event':['A','C','D']}, index=[1.,3.,3.])
df2 = pd.DataFrame(data={'event':['B','C']}, index=[2.,3.])

注意事件C被记录在两个帧中,并且 CD两者具有相同的索引值(时间戳)。

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 的笛卡尔积和Ddf1Cdf2 。我希望第 4 行只是( DNaN ),因为 D只出现在 df1而不是 df2 ,即:

    event1 event2
1.0      A    NaN
2.0    NaN      B
3.0      C      C
3.0      D    NaN

最佳答案

您需要在第二个 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

关于python - 连接两个具有共同、重复索引的 Pandas 数据框,而不进行笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49284864/

相关文章:

python - 获取矩形 mask 的真实边界框

python - 如何在 Django 聚合查询的 GROUP BY 子句中正确包含列?

python - savefig 循环将以前的图添加到图中

python - 如何使用 Python 和 Pandas 查找具有单个字符的句子

python - Pandas Groupby 和 sum 有两个变量-

python - Pandas 合并 : merge two dataframes on same column but keep different columns

python - Pandas 中的 sort_values() 方法

python - 机器学习标准化的目的是什么?

python - openid 和 oauth 一起?

python - 加速 pandas csv 读取和后续的 downcast