如何按 6 个月间隔而不是年份创建数据透视表?

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

我有简单的每日数据框 df:

date_rng = pd.date_range(start='2023-01-01', end='2024-01-05', freq='D')
data = np.random.rand(len(date_rng), 3)
df = pd.DataFrame(data, columns=['Column1', 'Column2', 'Column3'], index=date_rng)

我不希望使用 date_rng.dt.year 按年份进行透视,而是希望以 6 个月的日期增量进行转换。

pivot_df = pd.pivot_table(df, values='Vessel', index=date_rng.dt.year, columns='Col1',     aggfunc=pd.Series.nunique)

有什么建议吗?

我尝试使用 dt.quarter 但这只是按季度显示唯一计数,而不是按年份和季度显示。实际上,除了每年之外的任何自定义分组都是理想的。

python pandas dataframe group-by pivot-table
1个回答
0
投票

您可以尝试(请注意,我已添加

Vessel
列来制作,就像问题中的示例一样):

date_rng = pd.date_range(start="2023-01-01", end="2024-01-05", freq="D")
data = np.random.rand(len(date_rng), 3)
df = pd.DataFrame(data, columns=["Column1", "Column2", "Column3"], index=date_rng)

# added Vessel column
df["Vessel"] = np.random.randint(1, 5, size=len(date_rng))

pivot_df = pd.pivot_table(
    df,
    index=[df.index.year, np.where(df.index.month <= 6, "H1", "H2")],
    columns="Vessel",
    values=["Column1", "Column2", "Column3"],
    aggfunc="nunique",
)
print(pivot_df)

打印:

        Column1                   Column2                   Column3                  
Vessel        1     2     3     4       1     2     3     4       1     2     3     4
2023 H1    39.0  41.0  59.0  42.0    39.0  41.0  59.0  42.0    39.0  41.0  59.0  42.0
     H2    43.0  53.0  34.0  54.0    43.0  53.0  34.0  54.0    43.0  53.0  34.0  54.0
2024 H1     NaN   1.0   3.0   1.0     NaN   1.0   3.0   1.0     NaN   1.0   3.0   1.0
© www.soinside.com 2019 - 2024. All rights reserved.