【问题标题】:how to create subsets of pandas dataframe based on a boolean array value?如何根据布尔数组值创建熊猫数据框的子集?
【发布时间】:2022-01-04 20:33:22
【问题描述】:

我正在处理一个 pandas 数据框,其中一列 (bullish) 由布尔值组成,第二列 (split) 也是基于布尔值的,只要第一列值不同于之前的值,它就是 True它。 我这样做了:

df['split'] = df['bullish'] != df['bullish'].shift(-1) 

现在我想在 split 值为 True 的每个点将 pandas 数据帧分割成较小的子集,以便它创建所有 df['bullish'] 值要么只有 True 或只有错误。

提前感谢您的见解!

【问题讨论】:

  • 以文本形式提供一些示例数据。说明你到目前为止做了什么。

标签: python pandas dataframe subset slice


【解决方案1】:

欢迎使用 stackoverflow。在对 Pandas 提出更多问题之前,请先查看How to make good reproducible pandas examples

至于你的具体问题,我们先从一个简单的例子开始

import pandas as pd
df = pd.DataFrame({'bullish' : [True, True, True, True, False, False, True]})

然后我们可以这样拆分(注意我认为你在这里弄错了shift(-1))

df['split'] = df['bullish'] != df['bullish'].shift() 
df

这会产生


    bullish split
0   True    True
1   True    False
2   True    False
3   True    False
4   False   True
5   False   False
6   True    True

要实现您想要的,您可以将groupby 和cumsum 组合使用应用于'split' 列,如下所示:

for id, g in df.groupby(df['split'].cumsum()):
    print(f'group_id = {id}')
    print(g)

这将打印三个具有相同'bullish' 值的数据帧:

group_id = 1
   bullish  split
0     True   True
1     True  False
2     True  False
3     True  False
group_id = 2
   bullish  split
4    False   True
5    False  False
group_id = 3
   bullish  split
6     True   True

由于您没有指定您真正想要的输出(SO 的另一个好习惯),我将保留它

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2021-08-30
    • 2016-11-29
    • 2022-01-15
    相关资源
    最近更新 更多