Python 基于相应的numpy数组值拆分数据帧

Python 基于相应的numpy数组值拆分数据帧,python,numpy,pandas,Python,Numpy,Pandas,我的数据帧A看起来像: 2007-12-31 50230.62 2008-01-02 48646.84 2008-01-03 48748.04 2008-01-04 46992.22 2008-01-07 46491.28 2008-01-08 45347.72 2008-01-09 45681.68 2008-01-10 46430.5 其中日期列是索引。我还有一个长度相同的num

我的数据帧A看起来像:

    2007-12-31    50230.62
    2008-01-02    48646.84
    2008-01-03    48748.04
    2008-01-04    46992.22
    2008-01-07    46491.28
    2008-01-08    45347.72
    2008-01-09    45681.68
    2008-01-10    46430.5
其中日期列是索引。我还有一个长度相同的numpy数组B,其中包含元素-1、0和1。将数据帧A拆分为3个数据帧的最干净方法是什么,以便将具有相同对应B元素的行分组在一起。例如,如果B=numpy.array([0,0,0,1,1,-1,-1,0]),则数据帧应拆分为:

    X
    2007-12-31    50230.62
    2008-01-02    48646.84
    2008-01-03    48748.04
    2008-01-10    46430.5

    Y
    2008-01-04    46992.22
    2008-01-07    46491.28

    Z
    2008-01-08    45347.72
    2008-01-09    45681.68
利用熊猫很容易,然后您可以选择将它们分组,这样您就不会将数据翻一番。但你可以随时分配

import numpy as np
import pandas as pd
import io

data = """    2007-12-31    50230.62
    2008-01-02    48646.84
    2008-01-03    48748.04
    2008-01-04    46992.22
    2008-01-07    46491.28
    2008-01-08    45347.72
    2008-01-09    45681.68
    2008-01-10    46430.5"""

df = pd.read_csv(io.StringIO(data), delimiter='\s+', header=None)
B = np.array([0, 0, 0, 1, 1, -1, -1, 0])

df['B'] = B

df_groups = df.groupby(['B'])

x = df_groups.get_group((0))
y = df_groups.get_group((-1))
z = df_groups.get_group((1))
0,-1,1
是基于
B
值的名称