gpt4 book ai didi

python - 如何对混合类型的 Pandas 数据框进行重新采样?

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:35 25 4
gpt4 key购买 nike

我使用以下 Python 代码生成混合类型( float 和字符串)Pandas DataFrame df3:

df1 = pd.DataFrame(np.random.randn(dates.shape[0],2),index=dates,columns=list('AB'))
df1['C'] = 'A'
df1['D'] = 'Pickles'
df2 = pd.DataFrame(np.random.randn(dates.shape[0], 2),index=dates,columns=list('AB'))
df2['C'] = 'B'
df2['D'] = 'Ham'
df3 = pd.concat([df1, df2], axis=0)

当我将 df3 重新采样到更高的频率时,我没有将帧重新采样到更高的频率,但是 how 被忽略了,我只是得到了缺失值:

df4 = df3.groupby(['C']).resample('M',  how={'A': 'mean', 'B': 'mean',  'D': 'ffill'})
df4.head()

结果:

                      B          A        D
C
A 2014-03-31 -0.4640906 -0.2435414 Pickles
2014-04-30 NaN NaN NaN
2014-05-31 NaN NaN NaN
2014-06-30 -0.5626360 0.6679614 Pickles
2014-07-31 NaN NaN NaN

当我将 df3 重采样到较低频率时,我根本没有得到任何重采样:

df5 = df3.groupby(['C']).resample('A',  how={'A': np.mean, 'B': np.mean,  'D': 'ffill'})
df5.head()

结果:

                      B          A        D
C
A 2014-03-31 NaN NaN Pickles
2014-06-30 NaN NaN Pickles
2014-09-30 NaN NaN Pickles
2014-12-31 -0.7429617 -0.1065645 Pickles
2015-03-31 NaN NaN Pickles

我很确定这与混合类型有关,因为如果我仅使用数字列重新进行年度下采样,一切都会按预期进行:

df5b = df3[['A', 'B', 'C']].groupby(['C']).resample('A',  how={'A': np.mean, 'B': np.mean})
df5b.head()

结果:

                     B          A
C
A 2014-12-31 -0.7429617 -0.1065645
2015-12-31 -0.6245030 -0.3101057
B 2014-12-31 0.4213621 -0.0708263
2015-12-31 -0.0607028 0.0110456

但即使我切换到数字类型,对更高频率的重采样仍然无法按我预期的那样工作:

df4b = df3[['A', 'B', 'C']].groupby(['C']).resample('M',  how={'A': 'mean', 'B': 'mean'})
df4b.head()

结果:

                      B          A
C
A 2014-03-31 -0.4640906 -0.2435414
2014-04-30 NaN NaN
2014-05-31 NaN NaN
2014-06-30 -0.5626360 0.6679614
2014-07-31 NaN NaN

这给我留下了两个问题:

  1. 对混合类型的数据帧重新采样的正确方法是什么?
  2. 当从较低频率重新采样到较高频率时,进行重新采样以便插入新值的正确方法是什么?

即使您不能对两个部分都提供完整的答案,也可以提供部分解决方案或对任一问题的答案。

最佳答案

当从较低频率重新采样到较高频率时,我意识到当我想指定fill_method 时,我正在指定how。当我这样做时,事情似乎有效。

df4c = df3.groupby(['C']).resample('M',  fill_method='ffill')
df4c.head()
A B D
C
A 2014-03-31 -0.2435414 -0.4640906 Pickles
2014-04-30 -0.2435414 -0.4640906 Pickles
2014-05-31 -0.2435414 -0.4640906 Pickles
2014-06-30 0.6679614 -0.5626360 Pickles
2014-07-31 0.6679614 -0.5626360 Pickles

您获得的插值选择集更加有限,但它确实可以处理混合类型。

当不使用how 选项(我相信它默认是指)重新采样到较低频率时,下采样确实有效:

   df5c =df3.groupby(['C']).resample('A')
df5c.head()
A B
C
A 2014-12-31 -0.1065645 -0.7429617
2015-12-31 -0.3101057 -0.6245030
B 2014-12-31 -0.0708263 0.4213621
2015-12-31 0.0110456 -0.0607028

因此,问题似乎出在传递如何选项或其中一个选项的字典,大概是ffill,但我不确定。

关于python - 如何对混合类型的 Pandas 数据框进行重新采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662986/

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