我有简单的每日数据框 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 但这只是按季度显示唯一计数,而不是按年份和季度显示。实际上,除了每年之外的任何自定义分组都是理想的。
您可以尝试(请注意,我已添加
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