gpt4 book ai didi

python - Pandas - 你可以在跳过行的同时有条件地回填另一列吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:30 24 4
gpt4 key购买 nike

我有一个数据框,我需要在其中回填 7 个位置的值,但我不想这样做,除非不同的列中的值大于 0。 Pandas 有可能吗? Reason 中带 1 的最后一行显然是带 1 的原始行。

我现在使用的代码是返回填充 7 个位置:

s = df.Reason.bfill(limit=7)
s.loc[s.notnull() & df.Reason.isnull()] = 1
df['Reason'] = s

这样的输出:

Time Stamp              HP_1H_mean  Reason
2019-07-26 07:00:00 410.637966 0.0
2019-07-26 08:00:00 403.521735 0.0
2019-07-26 09:00:00 403.143925 0.0
2019-07-26 10:00:00 410.542895 0.0
2019-07-26 11:00:00 396.896670 0.0
2019-07-26 12:00:00 0.000000 0.0
2019-07-26 13:00:00 0.000000 0.0
2019-07-26 14:00:00 399.929812 0.0
2019-07-26 15:00:00 0.000000 0.0
2019-07-26 16:00:00 0.000000 0.0
2019-07-26 17:00:00 0.000000 0.0
2019-07-26 18:00:00 0.000000 0.0
2019-07-26 19:00:00 0.000000 0.0
2019-07-26 20:00:00 0.000000 0.0
2019-07-26 21:00:00 390.811179 0.0
2019-07-26 22:00:00 0.000000 0.0
2019-07-26 23:00:00 395.659520 0.0
2019-07-27 00:00:00 0.000000 1.0
2019-07-27 01:00:00 0.000000 1.0
2019-07-27 02:00:00 0.000000 1.0
2019-07-27 03:00:00 0.000000 1.0
2019-07-27 04:00:00 0.000000 1.0
2019-07-27 05:00:00 267.144639 1.0
2019-07-27 06:00:00 266.619800 1.0
2019-07-27 07:00:00 296.005934 1.0
2019-07-27 08:00:00 288.335720 0.0

我已经尝试过像 s.loc[s.notnull() & df.Reason.isnull() & df.HP_1H_mean != 0] = 1 这样的变体,虽然这些不会抛出异常(exception),它不起作用。

预期输出:

Time Stamp              HP_1H_mean  Reason
2019-07-26 07:00:00 410.637966 0.0
2019-07-26 08:00:00 403.521735 0.0
2019-07-26 09:00:00 403.143925 0.0
2019-07-26 10:00:00 410.542895 1.0
2019-07-26 11:00:00 396.896670 1.0
2019-07-26 12:00:00 0.000000 0.0
2019-07-26 13:00:00 0.000000 0.0
2019-07-26 14:00:00 399.929812 1.0
2019-07-26 15:00:00 0.000000 0.0
2019-07-26 16:00:00 0.000000 0.0
2019-07-26 17:00:00 0.000000 0.0
2019-07-26 18:00:00 0.000000 0.0
2019-07-26 19:00:00 0.000000 0.0
2019-07-26 20:00:00 0.000000 0.0
2019-07-26 21:00:00 390.811179 1.0
2019-07-26 22:00:00 0.000000 0.0
2019-07-26 23:00:00 395.659520 1.0
2019-07-27 00:00:00 0.000000 0.0
2019-07-27 01:00:00 0.000000 0.0
2019-07-27 02:00:00 0.000000 0.0
2019-07-27 03:00:00 0.000000 0.0
2019-07-27 04:00:00 0.000000 0.0
2019-07-27 05:00:00 267.144639 1.0
2019-07-27 06:00:00 266.619800 1.0
2019-07-27 07:00:00 296.005934 1.0
2019-07-27 08:00:00 288.335720 0.0

最佳答案

您使用 pandas 内部数据对齐来帮助解决这个问题:首先 bool 选择“HP_1H_mean”大于零的行,使用 bfilllimit=7 并分配它回到完整的专栏。 pandas 将根据索引对齐数据库。最后,fillna 为零。

df['Reason'] = df.loc[df['HP_1H_mean'] > 0, 'Reason'].bfill(limit=7)

如果'Reason'中已经存在零则更新然后屏蔽那些零

df['Reason'] = df.loc[df['HP_1H_mean'] > 0, 'Reason'].mask(df['Reason'] != 1).bfill(limit=7)

df['Reason'] = df['Reason'].fillna(0)

print(df)

输出:

          Time     Stamp  HP_1H_mean  Reason
0 2019-07-26 07:00:00 410.637966 0.0
1 2019-07-26 08:00:00 403.521735 0.0
2 2019-07-26 09:00:00 403.143925 0.0
3 2019-07-26 10:00:00 410.542895 1.0
4 2019-07-26 11:00:00 396.896670 1.0
5 2019-07-26 12:00:00 0.000000 0.0
6 2019-07-26 13:00:00 0.000000 0.0
7 2019-07-26 14:00:00 399.929812 1.0
8 2019-07-26 15:00:00 0.000000 0.0
9 2019-07-26 16:00:00 0.000000 0.0
10 2019-07-26 17:00:00 0.000000 0.0
11 2019-07-26 18:00:00 0.000000 0.0
12 2019-07-26 19:00:00 0.000000 0.0
13 2019-07-26 20:00:00 0.000000 0.0
14 2019-07-26 21:00:00 390.811179 1.0
15 2019-07-26 22:00:00 0.000000 0.0
16 2019-07-26 23:00:00 395.659520 1.0
17 2019-07-27 00:00:00 0.000000 0.0
18 2019-07-27 01:00:00 0.000000 0.0
19 2019-07-27 02:00:00 0.000000 0.0
20 2019-07-27 03:00:00 0.000000 0.0
21 2019-07-27 04:00:00 0.000000 0.0
22 2019-07-27 05:00:00 267.144639 1.0
23 2019-07-27 06:00:00 266.619800 1.0
24 2019-07-27 07:00:00 296.005934 1.0
25 2019-07-27 08:00:00 288.335720 0.0

关于python - Pandas - 你可以在跳过行的同时有条件地回填另一列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57382586/

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