gpt4 book ai didi

python - Pandas 对具有可变子数组长度的列求和并向结果添加更多列

转载 作者:行者123 更新时间:2023-12-01 00:23:42 25 4
gpt4 key购买 nike

我正在尝试对数据框中的数据进行求和/排列。我有以下数据

                                  time       t2m  ...        av      kont
latitude longitude ...
46.5 18.0 1998-01-12 07:00:00 0.284698 ... 0.001613
18.0 1998-01-24 08:00:00 -1.304504 ... 0.001418 FROMHERE
18.0 1998-01-24 09:00:00 -1.113770 ... 0.002679
18.0 1998-01-24 17:00:00 0.345001 ... 0.004633 FROMHERE
18.0 1998-01-24 18:00:00 -0.122498 ... 0.004400
18.0 1998-01-24 19:00:00 0.041565 ... 0.002184
18.0 1998-01-24 20:00:00 0.100861 ... 0.002220
18.0 1998-01-24 21:00:00 0.120636 ... 0.003083
18.0 1998-01-24 22:00:00 -0.615662 ... 0.004330
18.0 1998-01-24 23:00:00 -0.686798 ... 0.002404
18.0 1998-01-25 00:00:00 -0.743134 ... 0.000953
18.0 1998-01-29 02:00:00 -4.786346 ... 0.002984 FROMHERE

我的目标是对 FROMWHERE 单元格之间的 av 列中的数据进行求和,并在 time 列中添加开始和结束日期。我的输出应该如下所示:

                         t2m  ...       kont    sum             d1                  d2
latitude longitude ...
46.5 18.0 0.284698 ... 0.001613 1998-01-12 07:00:00 1998-01-24 08:00:00
18.0 -1.304504 ... FROMHERE 0.004097 1998-01-24 08:00:00 1998-01-24 09:00:00
18.0 0.345001 ... FROMHERE 0.024207 1998-01-24 17:00:00 1998-01-25 00:00:00
18.0 -4.786346 ... FROMHERE xxxxxx

kont 是从另一列的 df.loc 创建的,试图对这些子数组求和,但我几乎被困在这里。

由于数据量巨大,我正在寻找基于 Pandas 原生功能(向量计算)的解决方案。

任何帮助/想法都会受到赞赏。

最佳答案

基本上是一个孤岛和间隙问题。每行包含 FROMHERE 形成一个新的岛屿。您可以使用 cumsum 来解决这个问题:

    kont  cumsum
None 0
FROMHERE 1
None 1
FROMHERE 2
None 2
None 2
None 2
None 2
None 2
None 2
None 2
FROMHERE 3

代码:

def summarize(group):
s = group['kont'].eq('FROMHERE').cumsum()
return group.groupby(s).agg(
t2m=('t2m', 'first'),
sum=('av', 'sum'),
d1=('time', 'min'),
d2=('time', 'max')
)

df.groupby(['latitude', 'longitude']).apply(summarize).reset_index(level=-1, drop=True)

关于python - Pandas 对具有可变子数组长度的列求和并向结果添加更多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775168/

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