gpt4 book ai didi

python - 以其他列的日期和小时为条件创建新列

转载 作者:行者123 更新时间:2023-12-04 07:49:57 25 4
gpt4 key购买 nike

假设我有这个数据框的前两列:

df = pd.DataFrame({
'score': [2, 13, 24, 15, 11, 44],
'datetime': ["2017-08-30 07:00:00", "2017-08-30 08:00:00", "2017-08-31 07:00:00", "2017-08-31 08:00:00", "2017-08-29 21:00:00", "2017-08-28 21:00:00"],
# 'difference': [2, 13, 22, 2, -33, 44]
})
我想创建一个名为 difference 的新列(上面作为注释证明),这样它就等于:
  • 该行的分值
  • 前一天同一小时的分值。

  • 示例: difference第 4 行中的分数等于:该行中的分数 - 前一天(30 日)在 08:00:00 处的分数, 最终值: 15 - 13 = 2 .
    如果前一天和同一时间不存在,则取该行的分数值:
  • 例如。在第 0 行,时间 2017-08-30 07:00:00没有2017-08-29 07:00:00 ,因此只取 2
  • 最佳答案

    解决方案

    df['datetime'] = pd.to_datetime(df['datetime'])
    before = df['datetime'] - pd.DateOffset(days=1)

    df['difference'] = df['score'].sub(
    before.map(df.set_index('datetime')['score']), fill_value=0)
    解释
    解析 datetime 中的日期列使用 pd.to_datetime然后减去一个 DateOffset1 days计算前一天同一小时的时间戳。
    >>> before

    0 2017-08-29 07:00:00
    1 2017-08-29 08:00:00
    2 2017-08-30 07:00:00
    3 2017-08-30 08:00:00
    4 2017-08-28 21:00:00
    5 2017-08-27 21:00:00
    Name: datetime, dtype: datetime64[ns]
    现在 map score计算值 before柱子。
    >>> before.map(df.set_index('datetime')['score'])

    0 NaN
    1 NaN
    2 2.0
    3 13.0
    4 44.0
    5 NaN
    Name: datetime, dtype: float64
    然后从 score 中减去映射的分数值列以获取差异。
    >>> df

    score datetime difference
    0 2 2017-08-30 07:00:00 2.0
    1 13 2017-08-30 08:00:00 13.0
    2 24 2017-08-31 07:00:00 22.0
    3 15 2017-08-31 08:00:00 2.0
    4 11 2017-08-29 21:00:00 -33.0
    5 44 2017-08-28 21:00:00 44.0

    关于python - 以其他列的日期和小时为条件创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67035947/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com