【问题标题】:How to conditionally set a dataframe's value based on date如何根据日期有条件地设置数据框的值
【发布时间】:2014-07-15 14:23:11
【问题描述】:

我有一个 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)

【问题讨论】:

  • 你有没有返回df.loc[df['DateTime'] &lt;= dateOfChange]的行
  • 错字...(我上面有文件名和文件名)
  • 好的,我应该更新我的答案吗?
  • 是的!我会将其标记为正确,再次感谢!

标签: python datetime pandas comparison


【解决方案1】:

您可以只过滤要分配的行,然后分配给所有行,而不是迭代。这将更快并利用 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

【讨论】:

  • 这不是我有条件更改的日期,而是我是否要在我的 FileName 系列中附加另一个变量。
  • 对不起,你能用一个例子更好地解释一下吗,我不清楚
  • 我的文件名将是 ID#_PhoneNumber_Date.flac 或 ID#_Date.flac,具体取决于拨打电话的时间
  • 所以这应该有效:df.loc[df['DateTime'] &gt; dateOfChange, 'FileName'] = ID#_PhoneNumber_Date.flac 用于一种情况,然后df.loc[df['DateTime'] &gt; dateOfChange, 'FileName'] = ID#_Date.flac 用于另一种情况
  • 请编辑您问题的所有额外信息并提供数据、预期输出和更多解释
猜你喜欢
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多