【问题标题】:Pandas function for subtract a cumulative column monthly用于每月减去累积列的 Pandas 函数
【发布时间】:2022-01-25 20:42:32
【问题描述】:

我有一个天气数据集,它给了我很多年的数据,如下:

Date rainfallInMon
2009-01-01 0.0
2009-01-02 0.03
2009-01-03 0.05
2009-01-04 0.05
2009-01-05 0.06
... ...
2009-01-29 0.2
2009-01-30 0.21
2009-01-31 0.21
2009-02-01 0.0
2009-02-02 0.0
... ...

我正在尝试获取 每日降雨量,从月底减去前一天开始。例如:

Date rainfallDaily
2009-01-01 0.0
2009-01-02 0.03
2009-01-03 0.02
... ...
2009-01-29 0.01
2009-01-30 0.0
... ...

提前感谢您的努力。

【问题讨论】:

  • 如果你有所有的日子:df['rainfallDaily'] = df['rainfallInMon'].diff()
  • @mozway 月末不好用,会返回负数。
  • 好的,我没有看到每月重启的数据,那么你需要一个 groupby ;)

标签: python pandas


【解决方案1】:

因为有很多年的数据需要Series.dt.to_period的月份周期来区分months和years:

df['rainfallDaily'] = (df.groupby(df['Date'].dt.to_period('m'))['rainfallInMon']
                         .diff()
                         .fillna(0))

或者使用Grouper:

df['rainfallDaily'] = (df.groupby(pd.Grouper(freq='M',key='Date'))['rainfallInMon']
                          .diff()
                          .fillna(0))

print (df)
        Date  rainfallInMon  rainfallDaily
0 2009-01-01           0.00           0.00
1 2009-01-02           0.03           0.03
2 2009-01-03           0.05           0.02
3 2009-01-04           0.05           0.00
4 2009-01-05           0.06           0.01
5 2009-01-29           0.20           0.14
6 2009-01-30           0.21           0.01
7 2009-01-31           0.21           0.00
8 2009-02-01           0.00           0.00
9 2009-02-02           0.00           0.00

【讨论】:

  • awesome :) - 我不使用pd.Grouper 类,看起来真的很方便。
【解决方案2】:

试试:

# Convert to datetime if it's not already the case
df['Date'] = pd.to_datetime(df['Date'])

df['rainfallDaily'] = df.resample('M', on='Date')['rainfallInMon'].diff().fillna(0)
print(df)

# Output
        Date  rainfallInMon  rainfallDaily
0 2009-01-01           0.00           0.00
1 2009-01-02           0.03           0.03
2 2009-01-03           0.05           0.02
3 2009-01-04           0.05           0.00
4 2009-01-05           0.06           0.01
5 2009-01-29           0.20           0.14
6 2009-01-30           0.21           0.01
7 2009-01-31           0.21           0.00
8 2009-02-01           0.00           0.00
9 2009-02-02           0.00           0.00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多