【发布时间】:2019-01-17 00:15:03
【问题描述】:
我有一个带有 int 列年、月和日的 pands df。我想以最 Pythonic 的方式创建一个新列 df.is_payday,即 df.day 为 20 或 30 时为 1,否则为 0。
但是,有些月份没有 30 天,所以在这些情况下,我希望 df.is_payday 只有在 df.day 为 20 或 29 时才为 1,否则为 0。
但是,有些月份甚至没有 28 天,所以在这些情况下,我希望 df.is_payday 只有在 df.day 为 20 或 28 时才为 1,否则为 0。
这可以通过列表理解来完成吗?这也可以使用日历或日期时间模块根据月天数来完成吗?
编辑
我已经成功使用了下面的代码,虽然我更愿意使用 Pythonic:
lst = []
for i,k in zip(df['day'], df['month_total_days']):
if i == 20 | i == 30 & k >= 30:
lst.append(1)
elif i == 20 | i == 29 & k == 29:
lst.append(1)
elif i == 20 | i == 28 & k == 28:
lst.append(1)
else:
lst.append(0)
df['is_payday'] = lst
【问题讨论】:
-
我使用了以下内容,这很有效,但是我更愿意使用 pythonic 的东西: lst = [] for i,k in zip(df['day'], df['month_total_days'] ): 如果我 == 20 | i == 30 & k >= 30: lst.append(1) elif i == 20 | i == 29 & k == 29: lst.append(1) elif i == 20 | i == 28 & k == 28: lst.append(1) else: lst.append(0)
标签: python-3.x pandas calendar list-comprehension