gpt4 book ai didi

python - 如何根据列中值的差异拆分 Pandas 数据框

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

我有一个包含几列的 pandas 数据框,其中一列称为“strike”。如果 strike 列的一行的值大于 100 加上 strike 列的前一行,我想在那时将数据框分成两部分(它们仍然具有相同的列名)等等。我是 pandas 的新手,在查找了一些函数后无法想出一个简单的方法来做到这一点。

一个例子:下面的数据框:

strike crv vol
1400 w a
1450 x b
1600 y c
1800 z d

会出现 3 个数据帧:

strike crv vol
1400 w a
1450 x b

strike crv vol
1600 y c

strike crv vol
1800 z d

谢谢!

最佳答案

IIUC,这是 compare-cumsum-groupby 模式的另一个例子:

>>> df
strike crv vol
0 1400 w a
1 1450 x b
2 1600 y c
3 1800 z d
>>> group_ids = (df["strike"] > (df["strike"].shift() + 100)).cumsum()
>>> grouped = df.groupby(group_ids)
>>> for k,g in grouped:
... print("-----")
... print(g)
...
-----
strike crv vol
0 1400 w a
1 1450 x b
-----
strike crv vol
2 1600 y c
-----
strike crv vol
3 1800 z d

如果您愿意,您可以将其放入列表或字典中:

>>> group_list = [g for k,g in grouped]
>>> group_list[2]
strike crv vol
3 1800 z d
>>> group_dict = dict(list(grouped))
>>> group_dict[1]
strike crv vol
2 1600 y c

这是可行的,因为我们利用 True == 1 和 False == 0 的事实构建组 ID:

>>> df["strike"] > (df["strike"].shift() + 100)
0 False
1 False
2 True
3 True
Name: strike, dtype: bool
>>> (df["strike"] > (df["strike"].shift() + 100)).cumsum()
0 0
1 0
2 1
3 2
Name: strike, dtype: int64

然后我们可以对这些值进行分组。

关于python - 如何根据列中值的差异拆分 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543697/

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