【问题标题】:Calculating the mean of a part of a column of a pandas dataframe ignoring nans计算忽略nans的pandas数据框列的一部分的平均值
【发布时间】:2020-05-06 07:43:18
【问题描述】:

我无法计算 pandas 数据框中某列的一部分的平均值。 我需要将我的数据框划分为子窗口,并且我需要针对特定​​列的每个较小窗口的平均值。

目前我的代码如下所示:

array2 = np.array([[x[:,0].mean()]
                for x in np.array_split(array1, 10)])

所以此刻我将array1 分成10 个子数组。现在我的问题:出于某种原因,我将“nan”作为某些手段的解决方案。这可能是由于array1中必须有一些nan值的原因。我怎样才能只计算非 nan 值的平均值,而我根本不从 array1 中删除 nan?这可能吗?非常感谢!:)

【问题讨论】:

    标签: python pandas dataframe nan mean


    【解决方案1】:

    看起来你可以使用(它也应该适用于NaNs):

    df.groupby(df.index//10)['column'].mean()
    

    如果数据框的索引是pd.RangeIndex,则此方法有效。否则你可以这样做:

    df.groupby(pd.RangeIndex(df.shape[0])//10)['column'].mean()
    

    附带说明,要计算包含 NaNs 的 numpy 数组的平均值,您需要使用 numpy.nanmean

    【讨论】:

    • 你会想要做df.reset_index().groupby... 这样 //10 在任何情况下都能正常工作。
    • 别这么认为,如果索引是普通的pd.RangeIndex,这应该可以正常工作@oleg
    • 在我的建议中,df = df.reset_index() 显然应该在 groupby 操作之前完成,以免影响索引。
    • 不确定 np.arange 在下面是如何工作的,但我检查过它也不能与 DatetimeIndex 一起使用(抛出 TypeError: invalid type Promotion)。如果弄乱原始索引是一个问题,之后总是可以从“索引”列中恢复它。
    • @OlegO - 我忘记了长度df.groupby(np.arange(len(df))//10)['col'].mean()
    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 2021-04-28
    • 2016-02-28
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2022-01-09
    • 2014-04-01
    相关资源
    最近更新 更多