- 生成的与您的结构匹配的数据集/数据框
-
reset_index() 获取 TradingDay 作为列
- +1 考虑到我没想到你想要周末约会
-
set_index() 再次构造为多索引
import datetime as dt
s = ['000972.SZ', '600127.SH', '002311.SZ', '000910.SZ', '000893.SZ',
'600265.SH', '600359.SH', '002299.SZ', '600180.SH', '600978.SH']
id = ['643593', '2725262', '1130107', '573861', '554908', '2897425',
'3014062', '1112612', '2790871', '3719097']
df = pd.DataFrame([{"Industry":"Agriculture",
"TradingDay":r.floor("D"),
"id":id[i%10],
"SecuCode":s[i%10],
"turnover_factor_score":random.uniform(-1.5, 1),
"money_amount":100000}
for i, r in enumerate(pd.date_range(dt.datetime(2020,5,1),
dt.datetime(2020,5,4,23,59), freq="2.4H"))
if r.weekday()<5]).set_index(["Industry", "TradingDay", "id"])
print(f"BEFORE\n{df.to_string()}")
# make index columns, then add a day.
# *day* is used to ensure don't land on a weekend
df = df.reset_index().assign(
day=lambda dfa: dfa["TradingDay"].dt.weekday,
TradingDay=lambda dfa: np.where(dfa["day"]==4,
dfa["TradingDay"] + pd.offsets.BDay(),
dfa["TradingDay"] + pd.Timedelta("1D")) ,
).drop("day",axis=1).set_index(["Industry", "TradingDay", "id"])
print(f"\nAFTER\n{df.to_string()}")
输出
BEFORE
SecuCode turnover_factor_score money_amount
Industry TradingDay id
Agriculture 2020-05-01 643593 000972.SZ -0.329526 100000
2725262 600127.SH -1.496289 100000
1130107 002311.SZ -1.399186 100000
573861 000910.SZ 0.990120 100000
554908 000893.SZ 0.031071 100000
2897425 600265.SH 0.888231 100000
3014062 600359.SH -1.388038 100000
1112612 002299.SZ 0.513843 100000
2790871 600180.SH -0.163897 100000
3719097 600978.SH 0.007092 100000
2020-05-04 643593 000972.SZ -0.340063 100000
2725262 600127.SH -1.222781 100000
1130107 002311.SZ 0.202246 100000
573861 000910.SZ 0.255742 100000
554908 000893.SZ -0.512855 100000
2897425 600265.SH -1.062996 100000
3014062 600359.SH 0.271449 100000
1112612 002299.SZ 0.064240 100000
2790871 600180.SH 0.651950 100000
3719097 600978.SH -0.074825 100000
AFTER
SecuCode turnover_factor_score money_amount
Industry TradingDay id
Agriculture 2020-05-04 643593 000972.SZ -0.329526 100000
2725262 600127.SH -1.496289 100000
1130107 002311.SZ -1.399186 100000
573861 000910.SZ 0.990120 100000
554908 000893.SZ 0.031071 100000
2897425 600265.SH 0.888231 100000
3014062 600359.SH -1.388038 100000
1112612 002299.SZ 0.513843 100000
2790871 600180.SH -0.163897 100000
3719097 600978.SH 0.007092 100000
2020-05-05 643593 000972.SZ -0.340063 100000
2725262 600127.SH -1.222781 100000
1130107 002311.SZ 0.202246 100000
573861 000910.SZ 0.255742 100000
554908 000893.SZ -0.512855 100000
2897425 600265.SH -1.062996 100000
3014062 600359.SH 0.271449 100000
1112612 002299.SZ 0.064240 100000
2790871 600180.SH 0.651950 100000
3719097 600978.SH -0.074825 100000