【问题标题】:Python Dataframe: how do I perform vlookup equivalentPython Dataframe:我如何执行等效的 vlookup
【发布时间】:2020-11-04 07:52:01
【问题描述】:

这是 df(它是更大的 df 的子集)

df = pd.DataFrame({
                   'Date': ['04/03/2020', '06/04/2020','08/06/2020','12/12/2020'],
                    'Tval' : [0.01,0.015,-0.023,-0.0005]
})

如果我需要 Tval 来表示“2020 年 6 月 4 日”(我只需要一个日期)。我怎么得到它?我知道 merge 和 join 可用于在 python 中复制 vlookup 函数,但如果它是您要查找的单个值怎么办?执行任务的最佳方式是什么?

【问题讨论】:

  • 下面的答案有点误导。如果您知道“Date”中的值是唯一的,请通过“df.set_index(„Date“, inplace=True)” 设置索引,然后使用 df.loc[„06/04/2020“]

标签: python pandas join merge vlookup


【解决方案1】:

Pandas 文档建议使用 lociloc 进行大多数查找:

df = pd.DataFrame({
                   'Date': ['04/03/2020', '06/04/2020','08/06/2020','12/12/2020'],
                    'Tval' : [0.01,0.015,-0.023,-0.0005]
})

df.loc[df.Date == '06/04/2020', 'Tval']

这里,括号df.Date == '06/04/2020' 中表达式的第一部分选择您要查看的行的索引,第二部分指定要显示的列。

如果您想查看整行的数据,可以将其重写为df.loc[df.Date == '06/04/2020', : ]

【讨论】:

    【解决方案2】:

    在数据框中选择的工作方式如下:

    df.loc[df.Date == '06/06/2020', "Tval"]
    

    理解这一点的方法是:

    df.Date=='06/06/2020'
    
    Out: 
    0    False
    1    False
    2    False
    3    False
    Name: Date, dtype: bool
    

    产生一系列真/假值,显示日期列中的哪些行匹配相等。如果您给 DataFrame 这样的系列,它将仅选择系列为 True 的行。要查看这一点,请查看您从中获得了什么:

    df.loc[df.Date=='06/06/2020']
    
    Out[]: 
             Date   Tval
    2  08/06/2020 -0.023
    

    最后,我们只需要查看 'Tval' 的值:

    df.loc[df.Date == '06/06/2020', "Tval"]
    

    【讨论】:

    • 不要链接你的索引。一口气搞定:df[df["Date"] == '06/06/2020', "Tval"]
    • 请使用.loc通过掩码和标签进行选择。您的方法称为chained indexing,并不是基于行和列选择切片的有效方法stackoverflow.com/questions/41253170/…
    • 好的cmets。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多