首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用日期、月份和年份填充数据并操作该数据?

如何使用日期、月份和年份填充数据并操作该数据?
EN

Stack Overflow用户
提问于 2022-05-31 08:58:36
回答 1查看 153关注 0票数 0

我想使用熊猫或python创建一个新的表,它将具有与图片相同的列,但我想在新表中添加实际表的两个日期之间的所有日期。

例如,在第1行的图片中,生效日期为2月13日、2022年和价格为220,第二行生效日期为2021年9月23日。

我想在新的桌子上,所有日期都在2022年2月13日至2021年9月23日之间。除MRP/Unit外,所有其他列值将相同。

在2022/13/2022和8/23/2021之间,MRP/股的所有数值将为220。在2021年9月23日至209年9月9日期间,MRP/股的所有数值将为210。

EN

回答 1

Stack Overflow用户

发布于 2022-05-31 09:50:58

在这里,我跳过了应该将日期字符串转换为日期对象的部分。你可以在https://stackoverflow.com/questions/32204631/how-to-convert-string-to-datetime-format-in-pandas-python上检查一下

把你的数据文件想象成initial_df

代码语言:javascript
复制
initial_df = pd.DataFrame({'Weight':[215.235,215.235,215.235,215.235],
              'Effect Date':[date(2022,2,13),date(2021,9,23),date(2019,10,9),date(2019,7,14)],
              'MRP/Unit(Tk)':[220,210,200,190]})
代码语言:javascript
复制
    Weight Effect Date  MRP/Unit(Tk)
0  215.235  2022-02-13           220
1  215.235  2021-09-23           210
2  215.235  2019-10-09           200
3  215.235  2019-07-14           190

首先,您应该提取Effect Date列中的第一个和最后一个日期。

代码语言:javascript
复制
start_date = initial_df['Effect Date'].min()
end_date = initial_df['Effect Date'].max()

现在您可以使用pd.date_range方法在熊猫中创建一个日期范围。

代码语言:javascript
复制
date_index = pd.date_range(start_date,end_date)

其次,您可以用这个daterange作为索引创建一个新的dataframe,并将它与您的左联接一起initial_df以获得其他行。因为第一个dataframe只有一个索引列,另一个应该将连接键(Effect Date)设置为它的索引。

代码语言:javascript
复制
result_df = pd.DataFrame(index=date_index)\
  .join(initial_df.set_index('Effect Date'),
        how='left')
代码语言:javascript
复制
             Weight  MRP/Unit(Tk)
2019-07-14  215.235         190.0
2019-07-15      NaN           NaN
2019-07-16      NaN           NaN
2019-07-17      NaN           NaN
2019-07-18      NaN           NaN
...             ...           ...
2022-02-09      NaN           NaN
2022-02-10      NaN           NaN
2022-02-11      NaN           NaN
2022-02-12      NaN           NaN
2022-02-13  215.235         220.0

现在,我们可以使用熊猫的NaN方法的回填策略或前向填充策略来填充其他列中的fillna值。这种方法也可以在单列上完成。

代码语言:javascript
复制
result_df.fillna(method='bfill')
代码语言:javascript
复制
             Weight  MRP/Unit(Tk)
2019-07-14  215.235         190.0
2019-07-15  215.235         200.0
2019-07-16  215.235         200.0
2019-07-17  215.235         200.0
2019-07-18  215.235         200.0
...             ...           ...
2022-02-09  215.235         220.0
2022-02-10  215.235         220.0
2022-02-11  215.235         220.0
2022-02-12  215.235         220.0
2022-02-13  215.235         220.0

如果希望在某个日期前一个月更改MRP/Unit(Tk)值,则应使用反向填充值填充另一列。在您的Effect Date中复制initial_df列。然后对result_df中的该列也应用反向填充。然后,您可以决定在结果数据中需要哪个值,知道该日期之后的下一个日期,以及initial_df中的下面的MRP/Unit值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72444905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档