gpt4 book ai didi

python - 对 pandas 数据框中每个时间序列的第一次出现之前和最后一次出现之后的 NaN 值进行切片

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

我使用 Python 3 和 Pandas 处理时间序列。我有一个包含多个时间序列的数据框(在本例中为两个),每个时间序列都包含一个商店的销售数据。数据框如下所示:

                  index  Shop  Quantity
index Date
0 2017-01-08 0 1 NaN
1 2017-01-15 1 1 NaN
2 2017-01-22 2 1 34.0
3 2017-01-29 3 1 54.0
4 2017-02-05 4 1 42.0
5 2017-02-12 5 1 NaN
6 2017-01-08 6 2 NaN
7 2017-01-15 7 2 29.0
8 2017-01-22 8 2 NaN
9 2017-01-29 9 2 58.0
10 2017-02-05 10 2 49.0
11 2017-02-12 11 2 NaN

对于每个时间序列,我想删除第一次出现之前的 NaN 以及最后一次出现之后的 NaN。它应该类似于:

                  index  Shop  Quantity
index Date
2 2017-01-22 2 1 34.0
3 2017-01-29 3 1 54.0
4 2017-02-05 4 1 42.0
7 2017-01-15 7 2 29.0
8 2017-01-22 8 2 NaN
9 2017-01-29 9 2 58.0
10 2017-02-05 10 2 49.0

但是,以下代码会删除总体第一次出现之前和总体最后一次出现之后的 NaN,但不会删除索引为 5 和 6 的行:

df = df.loc[df['Quantity'].first_valid_index():df['Quantity'].last_valid_index()]
                  index  Shop  Quantity
index Date
2 2017-01-22 2 1 34.0
3 2017-01-29 3 1 54.0
4 2017-02-05 4 1 42.0
5 2017-02-12 5 1 NaN
6 2017-01-08 6 2 NaN
7 2017-01-15 7 2 29.0
8 2017-01-22 8 2 NaN
9 2017-01-29 9 2 58.0
10 2017-02-05 10 2 49.0

有什么想法可以解决这个问题吗?感谢您的帮助。

最佳答案

让我们使用groupbyfirst_valid_indexlast_valid_index以及使用loc的索引切片:

df.groupby('Shop', group_keys=False)\
.apply(lambda x: x.loc[x['Quantity'].first_valid_index():x['Quantity'].last_valid_index()])

输出:

                  ind  Shop  Quantity
index Date
2 2017-01-22 2 1 34.0
3 2017-01-29 3 1 54.0
4 2017-02-05 4 1 42.0
7 2017-01-15 7 2 29.0
8 2017-01-22 8 2 NaN
9 2017-01-29 9 2 58.0
10 2017-02-05 10 2 49.0

关于python - 对 pandas 数据框中每个时间序列的第一次出现之前和最后一次出现之后的 NaN 值进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377070/

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