更改 df 列中的日期时间频率 - Pandas

问题描述 投票:0回答:1

抱歉,我是 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')
pandas datetime frequency
1个回答
0
投票

选项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
© www.soinside.com 2019 - 2024. All rights reserved.