如何在Python的DataFrame中创建满足日期与非空条件的'Yes Or No'列?
问题修正方案
你的代码存在三个关键问题,导致输出不符合预期:
- 日期范围颠倒:
between方法要求起始日期早于结束日期,你写的是2022-03-31到2023-01-01,和需求的「2022年1月1日至2022年3月31日」完全相反。 - 空值判断错误:
df['Datefield 2'] != ['']是用列表做比较,正确的写法应该是判断非空字符串df['Datefield 2'] != '',或者更严谨的df['Datefield 2'].notna()(同时排除NaN值)。 - 逻辑运算优先级问题:
&的优先级高于!=,需要给两个条件分别加括号,避免运算顺序混乱。
修正后的代码如下:
# 转换Date列为datetime类型 df['Date'] = pd.to_datetime(df['Date'], dayfirst=True) # 构建条件并创建目标列 df['Yes Or No'] = ( df['Date'].between(pd.Timestamp('2022-01-01'), pd.Timestamp('2022-03-31')) & df['Datefield 2'].notna() ).astype(int)
如果你的空值是空白字符串(而非NaN),可以把df['Datefield 2'].notna()换成df['Datefield 2'] != '':
df['Yes Or No'] = ( df['Date'].between(pd.Timestamp('2022-01-01'), pd.Timestamp('2022-03-31')) & (df['Datefield 2'] != '') ).astype(int)
内容的提问来源于stack exchange,提问作者Jed
相关产品推荐
相关产品推荐

