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