python - 根据相应的 numpy 数组值分割 Dataframe

标签 python numpy pandas

我有 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 值的名称。

关于python - 根据相应的 numpy 数组值分割 Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33448001/

相关文章:

python - pandas 转换数据框数据透视表

python : choose only users that have purchased more than x element

python - pandas 聚合与自定义函数不一致吗?

python - Python 2 中的类型提示

python - 如何在python中有条件地选择上一行的值?

python - Cython:键入的内存 View 是键入 numpy 数组的现代方式吗?

python - NumPy - 使用强度值矩阵的图像(矩阵)阈值处理。

python - 如何随机替换列表中的字符串

python - 使用 subprocess.call 实时读取 c 可执行打印语句的输出

python - 使用 django 运行带有密码参数的 python 脚本