python - pandas 与索引中的重复值合并

标签 python pandas

你好,

我有以下两个数据帧(df1,df2),如果我合并它们(内部连接),我会得到以下数据帧:

In [85]: df1 = pd.DataFrame({'value' : [10, 11, 14, 16]}, index=[1, 2, 3, 3]); df1                 
Out[85]:             
   value             
1     10             
2     11             
3     14             
3     16             

In [86]: df2 = pd.DataFrame({'value' : [11, 15, 16]}, index=[1, 3, 3]); df2                        
Out[86]:             
   value             
1     11             
3     15             
3     16             

In [87]: pd.merge(df1, df2, how='inner', left_index=True, right_index=True)                        
Out[87]:             
   value_x  value_y  
1       10       11  
3       14       15  
3       14       16  
3       16       15  
3       16       16  

我想要以下数据框,而不是这个

    value_x  value_y 
1     10      11     
3     14      15     
3     16      16     

基本上,在出现重复行的情况下,不要按照当前发生的方式进行 m * n 合并。

最佳答案

我们需要一个新的参数 key ,通过使用 groupby + cumcount

pd.merge(df1.assign(key=df1.groupby(level=0).cumcount()).reset_index(),
    df2.assign(key=df2.groupby(level=0).cumcount()).reset_index(),
         how='inner',on=['index','key']).\
             drop('key',1).set_index('index')
Out[25]: 
       value_x  value_y
index                  
1           10       11
3           14       15
3           16       16

关于python - pandas 与索引中的重复值合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48154042/

相关文章:

python - Pandas 根据其他列中的子字符串更改列值

python - 排除除一列之外的所有值超过 100 的行

python - 如何将以 m 为底的字符串转换为以 n 为底的字符串

python - python 字典中部分匹配键的最大值

python - 实时获取 shell 输出并将所有输出存储在变量中

Python:创建一个根据条件变化的递增变量

python - 在 Python 中分组并查找连续时间并创建一个标志

python - 来自数据帧的按十年堆叠的直方图

python - python中不同级别的anti join pandas数据帧

python - 今天使用哪些书籍来学习离散事件仿真?