【问题标题】:Extract specific value from dataframe if date condition is satisfied如果满足日期条件,则从数据框中提取特定值
【发布时间】:2020-06-19 13:15:33
【问题描述】:

在下面的数据框中,我想运行一个代码来检查 col 中的今天日期。 D 并从 A 列返回特定值,即 19-06-2020(今天)从 A 列返回 7。

import pandas as pd
import datetime as dt

df = pd.DataFrame ([[2,3,4], [4,5,6], [7,5,6]], columns = ['A', 'B', 'C'])
df['D'] = pd.date_range(start = '17/06/2020', periods = len(df))

【问题讨论】:

    标签: python pandas dataframe datetime specifications


    【解决方案1】:

    boolean indexing 用于今天比较并选择第一个匹配值:

    print (df.loc[df.D == pd.Timestamp('now').floor('d'), 'A'].iat[0])
    7
    

    如果第一个值不存在,则选择第一个值并返回默认值的一般解决方案:

    print (next(iter(df.loc[df.D == pd.Timestamp('now').floor('d'), 'A']),'no match value'))
    7
    
    #for test comapred A column
    print (next(iter(df.loc[df.A == pd.Timestamp('now').floor('d'), 'A']),'no match value'))
    no match value
    

    【讨论】:

    • 谢谢! s = df.loc[row condition, column] 用于提取特定值。 next(iter(s)) 用于遍历列。我不明白的是为什么代码不使用 floor('d') 自动迭代?
    • 我还看到df.loc[df.A == 7, 'C'] 上面的代码不需要 next(iter()) 的东西来返回特定的值 6。它会自动遍历 col 中的每一行。一个
    • @RajMehta - s = df.loc[row condition, column] 用于提取特定值 = 是的,你是对的。但输出是系列,这意味着具有 1、2 或更多值的数组。所以next(iter) 语句用于选择第一个值。类似于查看第一个值.iat[0],只是更好,因为如果想要查看不存在的值,例如df.loc[df.A == pd.Timestamp('now').floor('d'), 'A'].iat[0],这失败了,但next(iter) 工作得很好
    • @RajMehta - 第二个使用floor('d') 原因pd.Timestamp('now') 返回日期时间与实际日期,但也与实际时间。在您的数据中只有日期,没有时间。因此,对于可能的比较,使用floor('d') 表示删除时间,因此如果您的数据中是日期时间,则此比较效果很好。
    猜你喜欢
    • 2023-02-24
    • 2016-08-12
    • 1970-01-01
    • 2014-07-22
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多