Python 熊猫:复制最近的日期';s丢失天数的数据

Python 熊猫:复制最近的日期';s丢失天数的数据,python,pandas,Python,Pandas,我在熊猫数据框中有一些以下格式的数据,其中索引是数据。这是某些日期的数据可能丢失的财务数据。我需要用最新日期(兴趣日期之前)的数据填写缺失的日期数据。另外,我只需要填写一周的工作日。我如何在熊猫身上做到这一点?一个简单的方法是遍历每一行(按日期顺序),同时保留最新的数据并复制到新的数据框中。如果缺少日期,则可以复制最新的可用数据。有更好的选择吗 Open Close High Low WeekDay Date

我在熊猫数据框中有一些以下格式的数据,其中索引是数据。这是某些日期的数据可能丢失的财务数据。我需要用最新日期(兴趣日期之前)的数据填写缺失的日期数据。另外,我只需要填写一周的工作日。我如何在熊猫身上做到这一点?一个简单的方法是遍历每一行(按日期顺序),同时保留最新的数据并复制到新的数据框中。如果缺少日期,则可以复制最新的可用数据。有更好的选择吗

               Open    Close     High      Low    WeekDay
Date                                                     
2018-03-12  1449.80  1433.60  1450.00  1423.60     Monday
2018-03-13  1438.60  1410.80  1439.85  1402.00    Tuesday
2018-03-14  1413.00  1390.25  1413.00  1381.00  Wednesday
2018-03-19  1340.00  1317.30  1345.00  1310.00     Monday
2018-03-20  1319.90  1304.70  1326.00  1297.00    Tuesday
2018-03-21  1314.80  1297.00  1314.80  1293.10  Wednesday
2018-03-22  1309.50  1289.80  1313.95  1275.00   Thursday
2018-03-23  1276.00  1277.90  1288.80  1270.00     Friday
2018-03-27  1285.55  1274.95  1309.95  1267.25    Tuesday
2018-03-28  1284.50  1294.65  1300.00  1273.00  Wednesday
2018-04-03  1300.00  1283.15  1300.05  1277.20    Tuesday
2018-04-04  1294.90  1271.35  1300.00  1267.55  Wednesday
用于所有不含
工作日的列,最后通过以下方式添加此列:

(以下解决方案填写所有缺失的天数,包括周末)

编辑:

(以下解决方案仅用于限制一周内的灌装过程)


谢谢你的回复。如何将其限制在工作日(更新了问题)。@dineshdileep-您认为是否删除
周六
周日
?请查看最后的编辑谢谢。注意:weekday_name已被弃用,现在是day_name()。您也可以使用B而不是D,然后使用df[~df['weekday']。不需要isin(['Saturday','Sunday'])。
cols = df.columns.difference(['WeekDay'])
df = df[cols].resample('D').ffill()
df['WeekDay'] = df.index.weekday_name

print (df)
               Open    Close     High      Low    WeekDay
Date                                                     
2018-03-12  1449.80  1433.60  1450.00  1423.60     Monday
2018-03-13  1438.60  1410.80  1439.85  1402.00    Tuesday
2018-03-14  1413.00  1390.25  1413.00  1381.00  Wednesday
2018-03-15  1413.00  1390.25  1413.00  1381.00   Thursday
2018-03-16  1413.00  1390.25  1413.00  1381.00     Friday
2018-03-17  1413.00  1390.25  1413.00  1381.00   Saturday
2018-03-18  1413.00  1390.25  1413.00  1381.00     Sunday
2018-03-19  1340.00  1317.30  1345.00  1310.00     Monday
2018-03-20  1319.90  1304.70  1326.00  1297.00    Tuesday
2018-03-21  1314.80  1297.00  1314.80  1293.10  Wednesday
2018-03-22  1309.50  1289.80  1313.95  1275.00   Thursday
2018-03-23  1276.00  1277.90  1288.80  1270.00     Friday
2018-03-24  1276.00  1277.90  1288.80  1270.00   Saturday
2018-03-25  1276.00  1277.90  1288.80  1270.00     Sunday
2018-03-26  1276.00  1277.90  1288.80  1270.00     Monday
2018-03-27  1285.55  1274.95  1309.95  1267.25    Tuesday
2018-03-28  1284.50  1294.65  1300.00  1273.00  Wednesday
2018-03-29  1284.50  1294.65  1300.00  1273.00   Thursday
2018-03-30  1284.50  1294.65  1300.00  1273.00     Friday
2018-03-31  1284.50  1294.65  1300.00  1273.00   Saturday
2018-04-01  1284.50  1294.65  1300.00  1273.00     Sunday
2018-04-02  1284.50  1294.65  1300.00  1273.00     Monday
2018-04-03  1300.00  1283.15  1300.05  1277.20    Tuesday
2018-04-04  1294.90  1271.35  1300.00  1267.55  Wednesday
cols = df.columns.difference(['WeekDay'])
df = df[cols].resample('D').ffill()
df['WeekDay'] = df.index.weekday_name
df = df[~df['WeekDay'].isin(['Saturday','Sunday'])]
print (df)
              Close     High      Low     Open    WeekDay
Date                                                     
2018-03-12  1433.60  1450.00  1423.60  1449.80     Monday
2018-03-13  1410.80  1439.85  1402.00  1438.60    Tuesday
2018-03-14  1390.25  1413.00  1381.00  1413.00  Wednesday
2018-03-15  1390.25  1413.00  1381.00  1413.00   Thursday
2018-03-16  1390.25  1413.00  1381.00  1413.00     Friday
2018-03-19  1317.30  1345.00  1310.00  1340.00     Monday
2018-03-20  1304.70  1326.00  1297.00  1319.90    Tuesday
2018-03-21  1297.00  1314.80  1293.10  1314.80  Wednesday
2018-03-22  1289.80  1313.95  1275.00  1309.50   Thursday
2018-03-23  1277.90  1288.80  1270.00  1276.00     Friday
2018-03-26  1277.90  1288.80  1270.00  1276.00     Monday
2018-03-27  1274.95  1309.95  1267.25  1285.55    Tuesday
2018-03-28  1294.65  1300.00  1273.00  1284.50  Wednesday
2018-03-29  1294.65  1300.00  1273.00  1284.50   Thursday
2018-03-30  1294.65  1300.00  1273.00  1284.50     Friday
2018-04-02  1294.65  1300.00  1273.00  1284.50     Monday
2018-04-03  1283.15  1300.05  1277.20  1300.00    Tuesday
2018-04-04  1271.35  1300.00  1267.55  1294.90  Wednesday