gpt4 book ai didi

python - 复杂的主元和重采样

转载 作者:太空狗 更新时间:2023-10-30 02:09:02 24 4
gpt4 key购买 nike

我不确定从哪里开始,所以很抱歉我没有尝试。

这是我的数据的初始形状:

df = pd.DataFrame({
'Year-Mth': ['1900-01'
,'1901-02'
,'1903-02'
,'1903-03'
,'1903-04'
,'1911-08'
,'1911-09'],
'Category': ['A','A','B','B','B','B','B'],
'SubCategory': ['X','Y','Y','Y','Z','Q','Y'],
'counter': [1,1,1,1,1,1,1]
})

df

这是我想要得到的结果 - 下面的 Mth-Year 已重新采样为 4 年桶:

enter image description here

如果可能的话,我想通过一个使“Year-Mth”可重采样的过程来做到这一点——这样我就可以轻松切换到不同的桶。

最佳答案

这是我的尝试:

df['Year'] = pd.cut(df['Year-Mth'].str[:4].astype(int), 
bins=np.arange(1900, 1920, 5), right=False)
df.pivot_table(index=['SubCategory', 'Year'], columns='Category',
values='counter', aggfunc='sum').dropna(how='all').fillna(0)
Out:
Category A B
SubCategory Year
Q [1910, 1915) 0.0 1.0
X [1900, 1905) 1.0 0.0
Y [1900, 1905) 1.0 2.0
[1910, 1915) 0.0 1.0
Z [1900, 1905) 0.0 1.0

据我所知,年列未参数化,因为 pandas(或 numpy)不提供步长的切割选项。但我认为可以通过对最小值/最大值进行一些算术来完成。像这样的东西:

df['Year'] = pd.to_datetime(df['Year-Mth']).dt.year
df['Year'] = pd.cut(df['Year'], bins=np.arange(df['Year'].min(),
df['Year'].max() + 5, 5), right=False)

不过,这不会像 Excel 那样创建漂亮的容器。

关于python - 复杂的主元和重采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39417686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com