【问题标题】:pandas dataframe loc multiple condition another variationpandas dataframe loc 多重条件另一种变体
【发布时间】:2023-01-26 17:45:49
【问题描述】:

我有一个数据框 df 和一个日期

last_date_pm = datetime.date(2022,12,30)

RiskDate、valStart、valEnd 列也是与 last_date_pm 格式相同的日期

我想打电话

df_s = df.loc[((df['RiskDate'] == df['valStart']) & (df['valEnd'] != last_date_pm)), ['Start'] + selected_cols]

结果是空的,因为这个“和”逻辑似乎没有按预期工作。 我试着打印 df['RiskDate'] == df['valStart'] 它来了

0 False
1 True
2 False
dtype: bool

但是这个 df['valEnd'] != last_date_pm 作为

0 True
1 True
2 True
Name: valEnd, dtype: bool

第二个条件中的额外名称会成为问题吗?

【问题讨论】:

  • print (df.dtypes) 是什么?
  • RiskDate 对象 valStart 对象 valEnd 对象 dtype:对象
  • 如果您的“valEnd”列包含 datetime.date 实例并且不是 DatetimeIndex,那么您的测试将按预期工作。那怎么了?你有什么错误吗?

标签: python pandas dataframe series


【解决方案1】:

似乎比较datesdatetimes,所以总是False

一个想法应该通过时间戳或日期时间进行比较:

last_date_pm = pd.Timestamp('2022-12-30')

或者按日期比较:

last_date_pm = datetime.date(2022,12,30)
(df['valEnd'].dt.date != last_date_pm)

编辑:将列转换为日期时间并按字符串进行比较2022-12-31

cols = ['RiskDate','valStart','valEnd']
df[cols] = df[cols].apply(pd.to_datetime)

last_date_pm = '2022-12-31'
df_s = df.loc[((df['RiskDate'] == df['valStart']) & 
               (df['valEnd'] != last_date_pm)), ['Start'] + selected_cols]

【讨论】:

  • 这样做 df​​['valEnd'].dt.date 不起作用,因为它抛出属性错误:只能使用 .dt 访问器和 datetimelike 值
  • 两者都是 datetime.date(2022,12,30)
  • @007 - 我检查 EDIT 是否正常工作?
猜你喜欢
  • 2022-01-09
  • 2019-11-15
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 2020-05-24
  • 2019-07-14
  • 1970-01-01
相关资源
最近更新 更多