【问题标题】:Pandas - changing each date in a date column [duplicate]Pandas - 更改日期列中的每个日期[重复]
【发布时间】:2018-08-03 14:49:35
【问题描述】:

(您可以假设日期列是日期时间)

这可能与问题有关,但我也有一个包含以下值的日期列表:

['2018-01-01', '2018-02-01', '2018-03-01', 
'2018-04-01', '2018-05-01']

我有下表:

date         arb1      arb2      amount
2018-01-02   Z         F         5
2018-01-03   G         H         10
2018-02-04   V         T         51
2018-03-03   R         S         54

我想要这个输出,其中每个日期都设置为其对应月份的第一天:

date         arb1      arb2      amount
2018-01-01   Z         F         5
2018-01-01   G         H         10
2018-02-01   V         T         51
2018-03-01   R         S         54

奖金(非必需):我实际上要做的是在按日期(月份)、arb1 和 arb2 分组后将金额相加,最终输出具有每个日期作为月初。我认为到达这里的一种简单方法是首先将每个日期更改为每月的第一天,但​​是如果在 pandas 中有一种简单的方法可以做到这一点,那么上述步骤就不需要了,你可以直接跳到这里

【问题讨论】:

  • 有趣的任务。你试过什么了?你能提供一个minimal reproducible example你面临的问题吗?
  • 您知道阅读 Pandas 文档有助于回答 90% 的问题吗? Pandas 有很棒的文档,最好不要阅读它。这个问题可以通过阅读本节来回答:pandas.pydata.org/pandas-docs/stable/…
  • @jpp 您链接的另一个问题不涉及其中一个日期已经是一个月的第一天的情况
  • @JesusMonroe,见第二个骗子。它有你接受的答案。

标签: python pandas dataframe


【解决方案1】:

您需要在下方获取该月的第一个日期。

df['date'] = df['date'].dt.to_period('M').dt.to_timestamp()

输出:

        date arb1 arb2  amount
0 2018-02-01    Z    F       5
1 2018-01-01    G    H      10
2 2018-02-01    V    T      51
3 2018-03-01    R    S      54

【讨论】:

  • 不敢相信它总是这么简单。谢谢
  • 这实际上并不完美。我有一个值为 2018-02-01 的值,此方法将其更改为 2018-01-01
  • @JesusMonroe 已编辑。让我知道这是怎么回事。
  • 哦,我想通了,但无论如何这更干净。对于后代,我也得到了它: df['date'] = np.where(~df.date.isin(months), df.date - pd.offsets.MonthBegin(1), df['date'])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 2022-11-03
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多