gpt4 book ai didi

python - 在给定 Pandas 条件的情况下,获取另一列的平均值

转载 作者:行者123 更新时间:2023-12-05 04:30:06 26 4
gpt4 key购买 nike

我有以下“源”数据框

            Value
Date
2022-01-01 26
2022-01-02 87
2022-01-03 4
2022-01-04 65
2022-01-05 89
2022-01-06 88
2022-01-07 82
2022-01-08 60
2022-01-09 8
2022-01-10 22

在另一个“输出”数据框中,我有 4 列定义了 2 个日期范围。如您所见,range1 始终被定义,而 range2 仅在某些行中定义:

  range1_lower range1_upper range2_lower range2_upper
0 2022-01-02 2022-01-03 2022-01-06 2022-01-07
1 2022-01-03 2022-01-06 NaN NaN

在输出 df 中,我需要添加一个“平均”列,对于每一行,如果日期属于任一个,我将获得源 df 的“值”列的平均值的两个范围。这类似于 Excel 中的 AVERAGEIFS 函数。

因此,例如,对于第 0 行,我需要获取范围 1(2022-01-02 到 2022-01-03)或范围 2(2022-01-06 到 2022-01-)内的所有值的平均值07).

对于第 1 行,由于未定义范围 2,我只需要获取范围 1(2022-01-03 到 2022-01-06)内所有值的平均值。

这是预期的输出:

  range1_lower range1_upper range2_lower range2_upper  average
0 2022-01-02 2022-01-03 2022-01-06 2022-01-07 65.25
1 2022-01-03 2022-01-06 NaN NaN 61.50

有没有办法做到这一点?谢谢

最佳答案

您可以交叉合并这两个数据框,然后过滤掉不在范围限制之间的日期,然后按范围列分组并聚合mean:

df = output.merge(source.reset_index(), how='cross')
df = df.query("range1_lower <= Date <= range1_upper or range2_lower <= Date <= range2_upper")
df = df.groupby([*output.columns], dropna=False)['Value'].mean().reset_index(name='avg')

print(df)

range1_lower range1_upper range2_lower range2_upper avg
0 2022-01-02 2022-01-03 2022-01-06 2022-01-07 65.25
1 2022-01-03 2022-01-06 NaT NaT 61.50

关于python - 在给定 Pandas 条件的情况下,获取另一列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72159424/

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