python - 如何根据日期有条件地设置数据框的值

标签 python datetime pandas comparison

我有一个 pandas 数据框,其中包含几列数据,我将其传递给 MSSQL。我的主键是一个文件名,该文件名自 2014 年 3 月 27 日起更改了格式。我正在我的数据框中以编程方式创建此文件名,但我需要考虑两个版本(之前的一种格式,包括 3 月 27 日创建的文件,其他适用于 3 月 27 日之后的所有文件)。

如何迭代每一行并有条件地设置我的文件名列?我的数据框中有一个日期时间列,它具有正确的日期时间格式。我只是不知道如何与更改日期进行比较,然后有条件地创建 df[FileName]。

感谢@EdChum!

dateOfChange = datetime.date(2014, 03, 27)        

df.loc[df['DateTime'] > dateOfChange, 'FileName'] = df.BAC.map(str) + '_' + df.Year.map("{:04}".format, str) + df.Month.map("{:02}".format, str) + df.Day.map("{:02}".format, str) + df.Hour.map("{:02}".format, str) + df.Minute.map("{:02}".format, str) + df.Second.map("{:02}".format, str) + "_" + df.NumberDialed.map(str)
df.loc[df['DateTime'] <= dateOfChange, 'FileName'] = df.BAC.map(str) + '_' + df.Year.map("{:04}".format, str) + df.Month.map("{:02}".format, str) + df.Day.map("{:02}".format, str) + df.Hour.map("{:02}".format, str) + df.Minute.map("{:02}".format, str) + df.Second.map("{:02}".format, str)

最佳答案

您无需迭代,只需过滤要分配的行,然后分配给所有行。这会更快并且利用了 Pandas 的力量:

df.loc[df['DateTime'] > dateOfChange, 'FileName'] = someVal
df.loc[df['DateTime'] <= dateOfChange, 'FileName'] = otherVal

我们在这里使用loc来执行标签索引,请参阅文档:http://pandas.pydata.org/pandas-docs/stable/indexing.html#selection-by-label

关于python - 如何根据日期有条件地设置数据框的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760743/

相关文章:

python - 将日期转换为 unix 时间戳时增加一小时

python - 查找具有与 id 匹配的最近时间戳的行,并添加具有值的行

Python 类派生自 pandas DataFrame,具有 list/DataFrame 属性

string - read_table 读取所有数据到一列

python - Scipy fisher_exact 测试需要很长时间

python - 减少 django modelform 中的重复查询

python:WSGI 应用程序中的 APScheduler

python - 为什么 numpy View 向后?

c# - 你如何遍历一年中的每一天?

mysql - 根据给定的日期周期检查动态到期日期