我想使用熊猫或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。

发布于 2022-05-31 09:50:58
在这里,我跳过了应该将日期字符串转换为日期对象的部分。你可以在https://stackoverflow.com/questions/32204631/how-to-convert-string-to-datetime-format-in-pandas-python上检查一下
把你的数据文件想象成initial_df
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]}) 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列中的第一个和最后一个日期。
start_date = initial_df['Effect Date'].min()
end_date = initial_df['Effect Date'].max()现在您可以使用pd.date_range方法在熊猫中创建一个日期范围。
date_index = pd.date_range(start_date,end_date)其次,您可以用这个daterange作为索引创建一个新的dataframe,并将它与您的左联接一起initial_df以获得其他行。因为第一个dataframe只有一个索引列,另一个应该将连接键(Effect Date)设置为它的索引。
result_df = pd.DataFrame(index=date_index)\
.join(initial_df.set_index('Effect Date'),
how='left') 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值。这种方法也可以在单列上完成。
result_df.fillna(method='bfill') 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值。
https://stackoverflow.com/questions/72444905
复制相似问题