gpt4 book ai didi

python Pandas : Inserting new rows for date gaps in data

转载 作者:太空宇宙 更新时间:2023-11-04 08:06:52 25 4
gpt4 key购买 nike

我有这样的 Pandas 数据框

Date      Curr    Amount
1/1/2015 USD 100.00
1/2/2015 USD 125.00
1/5/2015 USD 110.00
1/6/2015 USD 115.00

1/1/2015 AUD 100.00
1/2/2015 AUD 125.00
1/5/2015 AUD 110.00
1/6/2015 AUD 115.00

期望的输出

    Date  curr  Amount
1/1/2015 usd 100.00
1/2/2015 usd 125.00
1/3/2015 usd 125.00
1/4/2015 usd 125.00
1/5/2015 usd 110.00
1/6/2015 usd 115.00
1/1/2015 aud 100.00
1/2/2015 aud 125.00
1/3/2015 aud 125.00
1/4/2015 aud 125.00
1/5/2015 aud 110.00
1/6/2015 aud 115.00

源数据只记录了金额的变化,我想插入缺失的日期以及跳过前的金额。

在我的示例中,它从 1/2 跳到 1/5。我希望使用 1/2 金额填写金额列,并为缺失的日期创建 3 行。

谢谢

最佳答案

一个很长的两个衬里应该被打破:

idx = pd.DatetimeIndex(start=min(df.Date), end=max(df.Date), freq='D')
df2 = (pd.DataFrame(df.set_index(['Date', 'Curr']).unstack('Curr'), index=idx).fillna(0)
+ df.set_index(['Date', 'Curr']).unstack('Curr')).ffill().stack()
>>> df2
Amount
Curr
2015-01-01 AUD 100
USD 100
2015-01-02 AUD 125
USD 125
2015-01-03 AUD 125
USD 125
2015-01-04 AUD 125
USD 125
2015-01-05 AUD 110
USD 110
2015-01-06 AUD 115
USD 115

仔细观察,我首先使用原始 DataFrame 中的最小和最大日期创建了一个 DatetimeIndex。我将频率设置为每日 ('D'),但您可能想使用另一个 offset frequency例如工作日 ('B'):

idx = pd.DatetimeIndex(start=min(df.Date), end=max(df.Date), freq='D')

然后我取消堆叠 DataFrame,以便索引中只有日期。

df_temp = df.set_index(['Date', 'Curr']).unstack('Curr')

>>> df_temp
Amount
Curr AUD USD
Date
1/1/2015 100 100
1/2/2015 125 125
1/5/2015 110 110
1/6/2015 115 115

我创建了一个临时的 DataFrame,它将全部为 NaN,但包含我新的扩展日期列表。我用零填充这个 DataFrame 并用 df_temp 中的值覆盖它:

df_temp2 = (pd.DataFrame(df_temp, index=idx).fillna(0) + df_temp)

>>> df_temp2
Amount
Curr AUD USD
2015-01-01 100 100
2015-01-02 125 125
2015-01-03 NaN NaN
2015-01-04 NaN NaN
2015-01-05 110 110
2015-01-06 115 115

最后,我向前填充值以移除 NaN,并堆叠货币:

>>> df_temp2.ffill().stack() 
Amount
Curr
2015-01-01 AUD 100
USD 100
2015-01-02 AUD 125
USD 125
2015-01-03 AUD 125
USD 125
2015-01-04 AUD 125
USD 125
2015-01-05 AUD 110
USD 110
2015-01-06 AUD 115
USD 115

关于 python Pandas : Inserting new rows for date gaps in data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29709921/

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