用 pandas 计算每个后续组的 2 行的平均值

Posted

技术标签:

【中文标题】用 pandas 计算每个后续组的 2 行的平均值【英文标题】:Calculate mean of each subsequent group of 2 rows with pandas 【发布时间】:2019-09-18 07:49:14 【问题描述】:

我正在尝试计算所有数据框的每个后续组的 2 行的平均值。我想我通过以下几行得到了这一点: df.groupby(np.arange(len(df))//2).mean()

但是,问题在于并非所有值都是数字。在这种情况下,如果该组的第二行是数字,而第一行不是,而不是平均值,则该值与第二行保持相同。如果两行都不是数字,则该值应分配为 0。

为了更好的可视化,我有这个数据框:

    Well    Ct
0    A1    Undetermined
1    A2    Undertermined
2    A3    Undetermined
3    A4    41.2
4    B1    42
5    B2    43

我想要得到的是:

     Well     Ct
0    A1-A2    0.0
1    A3-A4    41.2
2    B1/B2    42.5

有什么方法可以解决这个问题或其他已经发布的类似问题吗?

【问题讨论】:

【参考方案1】:

使用pandas.to_numeric 将非数字值强制转换为NaNs(默认情况下,pandas 在计算平均值时会忽略该值),然后使用groupby + agg 分配最终组。


df.Ct = pd.to_numeric(df.Ct, errors='coerce')

df.groupby(np.arange(df.shape[0]) // 2).agg('Well': '-'.join, 'Ct': 'mean').fillna(0)

    Well    Ct
0  A1-A2   0.0
1  A3-A4  41.2
2  B1-B2  42.5

【讨论】:

工作得很好!谢谢!

以上是关于用 pandas 计算每个后续组的 2 行的平均值的主要内容,如果未能解决你的问题,请参考以下文章

计算 Pandas 中具有相同列值的行的平均值

Pandas - 用特定组的平均值替换列中的 NaN

如何计算 n 行的平均值并将答案粘贴到 pandas 列的下 n 行?

pandas计算dataframe数据行的均值(mean)实战:设置skipna=False则计算行均值时不会忽略NaN值

Pandas Dataframe:获取组内每个子组的第一行的平均值

计算 Octave 中行组的列的平均值