【问题标题】:Create a vector with values from a Numpy array selected according to criteria in a Pandas DataFrame使用根据 Pandas DataFrame 中的标准选择的 Numpy 数组中的值创建一个向量
【发布时间】:2014-10-03 07:17:03
【问题描述】:

我正在使用包含两列整数的 pandas df。对于 df 的每个数据,我想选择这两个整数,将它们用作 [row,column] 对以从 np.array 中提取值并使用提取的值创建一个新的 np.array。

更详细地说,我的 df 包含以下条目:

             State  FutureState
DATE                                                         
1947-10-01       0            0
1948-01-01       0            1
1948-04-01       1            1
1948-07-01       1            1

对于每个Date,我想选择 [State,FutureState] 对并从以下 np.array 中提取相应的 [row,column] 项,称为P

array([[ 0.7,  0.3],
       [ 0.4,  0.6]])

使用这些值,我想创建一个名为 Transition 的新 np.array,其中包含以下值:

[P[0,0],P[0,1],P[1,1],P[1,1]] = [0.7, 0.3, 0.6, 0.6] 

用作数组P 索引的[0,0], [0,1], [1,1] [1,1] 对是每个日期的[State,FutureState] 的值(1947-10-01、1948-01-01、1948-04-01、1948-07- 01)。

我已经尝试了很多不同的方法来解决我的问题,但都无济于事。有人可以建议如何成功创建Transition 向量吗?

【问题讨论】:

  • 抱歉有点不清楚你在问什么,你能提供更多信息吗,例如你从哪里得到 p[0,1] 值,因为不清楚这是哪个日期的例子
  • @EdChum:感谢您的评论,请原谅我的困惑。我在[P[0,0],P[0,1],P[1,1],P[1,1]] = [0.7, 0.3, 0.6, 0.6] 行下方添加了一行。这足以让我的问题更清楚吗?
  • 这可行,但我对 numpy 整形不太熟悉:P[df.values.reshape([4,2])[1]]

标签: python arrays numpy pandas


【解决方案1】:

试试这个:

p[df.State, df.FutureState]

这里是完整的代码:

import io
import pandas as pd
import numpy as np

txt = """             State  FutureState                                                        
1947-10-01       0            0
1948-01-01       0            1
1948-04-01       1            1
1948-07-01       1            1"""

df = pd.read_csv(io.BytesIO(txt), delim_whitespace=True)
p = np.array([[ 0.7,  0.3], [ 0.4,  0.6]])
p[df.State, df.FutureState]

【讨论】:

    【解决方案2】:

    这个怎么样?

    df.apply(lambda x:P[x[0],x[1]], axis=1)
    

    它按照您的描述进行,沿着df 逐行(因此应用axis=1)并使用条目作为在P 中选择的索引。

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2017-11-13
      • 2019-11-23
      • 1970-01-01
      • 2021-05-02
      • 2017-01-14
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      相关资源
      最近更新 更多