首页 > 解决方案 > 熊猫数据框函数返回日期最近的行并且其中一列包含输入值,抛出错误

问题描述

如果数据框列中存在特定输入的最新日期,我正在尝试过滤该行。

我写了以下代码:

def ChkFindDate(df, id):
    if df.loc[df['id'] == id & (df['Chk']==1)]:
        recent_date = df['DateCol'].max()
        df1 = df[df['DateCol'] == recent_date]
        return(df1['id', "Chk", 'DateCol', "Col2"])
    else:
        return(None)

如果列 'id' 包含输入 id,请检查最近的日期,然后从数据框中的 4 列中返回行。否则不返回。

当我使用时ChkFindDate(DataFrame, 12345),这是抛出错误:

/apps/dsa/venv/lib/python3.6/site-packages/pandas/core/generic.py in __nonzero__(self)
   1571         raise ValueError("The truth value of a {0} is ambiguous. "
   1572                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1573                          .format(self.__class__.__name__))
   1574 
   1575     __bool__ = __nonzero__

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

标签: pythonpandas

解决方案


另一种方法可能是:

def ChkFindDate(df, id):

    if (df['id'].eq(id) & df['Chk'].eq(1)).any():
        recent_date = df['DateCol'].max()
        return df.loc[df['DateCol'] == recent_date, ['id', "Chk", 'DateCol', "Col2"]]
    return

推荐阅读