抱歉,我是 DS 新手, 如果我有 df 带有像下面的“B”这样的列, 但我想将 B 列的频率更改为 1 个工作日而不是 3 个工作日,以便输出 df 将有 7 个条目,而不是 3 个;如何使用 .offsets() 或 Dateoffset() 来做到这一点? 预先感谢您:-)
df = pd.DataFrame(
{
'A': np.random.randint(0, 20, size = 3),
'B': pd.date_range('1/1/2010', periods = 3, freq = '3B')
}
)
df['A'] = df['A'].astype('Int64')
选项1
set_index
+ asfreq
+ reset_index
+ df.loc
out = df.set_index('B').asfreq('1B').reset_index().loc[:, [*'AB']]
输出:
A B
0 8 2010-01-01
1 <NA> 2010-01-04
2 <NA> 2010-01-05
3 5 2010-01-06
4 <NA> 2010-01-07
5 <NA> 2010-01-08
6 8 2010-01-11
选项2
pd.date_range
+ df.reindex
reindex = pd.date_range(df['B'].min(), periods=7, freq='1B')
out2 = (
df.set_index('B')
.reindex(reindex)
.rename_axis('B')
.reset_index().loc[:, [*'AB']]
)
选项3
df.merge
out3 = df.merge(pd.DataFrame({'B': reindex}), on='B', how='right')
平等检查:
dfs = [out, out2, out3]
all(df.equals(dfs[0]) for df in dfs)
# True