【问题标题】:Merging pandas dataframe using index.searchsorted使用 index.searchsorted 合并熊猫数据框
【发布时间】:2014-05-21 01:29:30
【问题描述】:

我想按时合并两个数据帧,但我不想完全合并,而是想得到 max(time1)

我认为 pandas index.searchsorted 是最好的方法,但我不知道如何让合并工作

例如:

import pandas as pd

d1 = {'time' :pd.Series([100., 200., 300.]),'val1' : pd.Series([10., 20., 30.])}
df1 = pd.DataFrame(d1)
df1 = df1.set_index(['time'])

d2 = {'time' :pd.Series([150., 170., 305., 400.]),'val2' : pd.Series([1., 2., 3., 4.])}
df2 = pd.DataFrame(d2)
df2 = df2.set_index(['time'])

在这个例子中,我想找到一个本质上是 df2 的数据帧,但它的 val1 应该是 = [10, 10, 30, 30]。

df1.index.searchsorted(df2.index)

上面似乎返回了我想要的索引......但我不确定从这里去哪里。非常感谢任何帮助!

我曾希望以下内容会返回正确的条目,但它的索引超出范围错误

df1.ix(df1.index[df1.index.searchsorted(df2.index)])

【问题讨论】:

    标签: python merge pandas


    【解决方案1】:

    使用reindex:

    import pandas as pd
    
    d1 = {'time' :pd.Series([100., 200., 300.]),'val1' : pd.Series([10., 20., 30.])}
    df1 = pd.DataFrame(d1)
    df1 = df1.set_index(['time'])
    
    d2 = {'time' :pd.Series([150., 170., 305., 400.]),'val2' : pd.Series([1., 2., 3., 4.])}
    df2 = pd.DataFrame(d2)
    df2 = df2.set_index(['time'])
    
    df1.reindex(df2.index, method="ffill")
    

    输出:

          val1
    time      
    150     10
    170     10
    305     30
    400     30
    

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 2018-02-02
      • 2017-06-11
      • 2016-01-01
      • 2016-10-31
      相关资源
      最近更新 更多