我有 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
其中日期列是索引。我还有一个长度相同的 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
很容易利用 pandas 中的 groupby
,然后您可以选择将它们分组,这样您就不会增加数据量。但你随时可以分配
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
值的名称。
我是一名优秀的程序员,十分优秀!