python - 熊猫数据框函数返回日期最近的行并且其中一列包含输入值,抛出错误
问题描述
如果数据框列中存在特定输入的最新日期,我正在尝试过滤该行。
我写了以下代码:
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().
解决方案
另一种方法可能是:
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
推荐阅读
- linux - 相同的脚本,相同的权限,一个挂一个不,如何?为什么?
- java - 为什么 println 在 for 循环中只打印一次并且值错误?
- angular - 如何对齐不同行上的 2 个 mat-slide-toggle 字段
- c - 是否有可以输出长值的 longjmp 版本?
- angular - 特定于每个模块的注入
- wordpress - 将wordpress应用程序从本地移动到cpanel后如何更改旋转滑块的baseurl
- matlab - 为什么我使用 Matlab 滤波器设计工具创建的滤波器不适用于定点数?
- integer - 每次计数器更新(可变整数范围)如何发送一点?
- github - 仅当有人打开 PR 时才运行 GitHub Action
- excel - 使用一张表中的单元格值作为粘贴到另一张表的目的地