【问题标题】:How do I use python or pandas to filter a DataFrame based on a column that consists of a list of dictionary?如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?
【发布时间】:2021-02-15 21:08:08
【问题描述】:

我有一个 DataFrame,其中一列是字典列表。我需要在包含字典列表的列上应用条件并获取一个布尔值。条件包括日期时间格式。

lastDate = pd.to_datetime(date.today().replace(day=1) - timedelta(1))

Output is: Timestamp('2020-10-31 00:00:00')

数据帧,

ID    Name     Status
1     Rav      [{'status': 'SIGNUP', 'Date': datetime.datetime(2020, 10, 30, 2, 43, 18, 578000)}, {'status': 'REG_COMPLETED', 'Date': datetime.datetime(2020, 10, 30, 2, 55, 52, 120000)}]
2     Suv      [{'status': 'SIGNUP', 'Date': datetime.datetime(2020, 11, 01, 2, 43, 18, 578000)}, {'status': 'REG_COMPLETED', 'Date': datetime.datetime(2020, 11, 01, 2, 55, 52, 120000)}]
3     Tim      [{'status': 'SIGNUP', 'Date': datetime.datetime(2020, 11, 01, 2, 43, 18, 578000)}, {'status': 'REG_COMPLETED', 'Date': datetime.datetime(2020, 11, 01, 2, 55, 52, 120000)}]
4     Jaq      [{'status': 'SIGNUP', 'Date': datetime.datetime(2020, 11, 01, 2, 43, 18, 578000)}, {'status': 'REG_COMPLETED', 'Date': datetime.datetime(2020, 11, 01, 2, 55, 52, 120000)}]
5     Tan      [{'status': 'SIGNUP', 'Date': datetime.datetime(2020, 10, 30, 2, 43, 18, 578000)}, {'status': 'REG_COMPLETED', 'Date': datetime.datetime(2020, 10, 30, 2, 55, 52, 120000)}]
If the status = "REG_COMPLETED" and Date <= lastDate, THEN True else False

所需的输出,

ID    Name     Status
1     Rav      True
2     Suv      False
3     Tim      False
4     Jaq      False
5     Tan      True

我试过了,但给了我一个空的 DataFrame,

df[df['status'].apply(lambda x: x[0]['Status']=='REG_COMPLETED' and x[0]['Date']<=lastDate)]

【问题讨论】:

    标签: python pandas list dictionary datetime


    【解决方案1】:

    使用列表推导获取Date 如果status 匹配条件,比较并测试any 是否至少有一个True

    f = lambda x: any(y['Date'] <= lastDate for y in x if y['status']=='REG_COMPLETED')
    df['Status'] = df['Status'].apply(f)
    print (df)
       ID Name  Status
    0   1  Rav    True
    1   2  Suv   False
    2   3  Tim   False
    3   4  Jaq   False
    4   5  Tan    True
    

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 2015-12-22
      • 2021-10-04
      • 2022-10-13
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 2020-07-17
      • 2022-12-04
      相关资源
      最近更新 更多