如何从pandas数据帧中获取单个值?

时间:2018-03-18 14:16:41

标签: python pandas

我是熊猫的新手。

我试图根据另一列中的值获取特定值。然而输出是作为一个值列表而不是一个值,而我可以尝试用它来做,我想了解我做错了什么。 `prem_ce'

OpenInterest  Volume  BidPrice  OfferPrice  StrikePrice  prem_ratio
6     8,296,000   3,934      4.15        4.25        100.0         3.0   
7    10,872,000   3,981      1.60        1.65        110.0         2.0   
8     8,692,000   1,302      0.70        0.75        120.0         2.0   
9     5,524,000   1,118      0.35        0.40        130.0         1.0   
10    3,108,000     110      0.20        0.25        140.0         1.0   
11    2,692,000      55      0.10        0.15        150.0         1.0   
12    1,908,000       4      0.05        0.10        160.0         0.0   
13    1,176,000       8      0.05        0.10        170.0         0.0   
14      920,000       6      0.05        0.10        180.0         0.0   
15      192,000       1      0.05        0.10        190.0         0.0   
16      336,000       7      0.05        0.10        200.0         0.0   
17      168,000       2      0.00        0.10        210.0         0.0   
18       24,000       2      0.00        0.10        220.0         0.0   
19            0       0      0.00        0.10        230.0         0.0   
20            0       0      0.00        0.15        240.0         NaN   

我尝试了以下内容:

for ratio in prem_ce['prem_ratio']:
    if ratio >= 2 and ratio is not 'NaN':
        x = int(ratio)
        ratio_row = prem_ce.index[prem_ce['prem_ratio'] == ratio]
        ce_strike_sell = prem_ce['StrikePrice'][ratio_row].values
        print(ce_strike_sell)

我得到以下输出:

[ 100.] 
[ 110.  120.]
[ 110.  120.]

我已经通过

制作了prem_ratio
prem_ce['prem_ratio'] = prem_ce['BidPrice'] / prem_ce['OfferPrice'].shift(-1) 

现在我尝试将用于计算StrikePrice的{​​{1}}放入prem_ratio

我无法理解为什么我会得到variables并且第一个list只有一个值,而其他两个有2个值。

编辑 -

我希望程序循环遍历每一行,并在满足条件时给出1个值。即3个循环中的100.0,110.0,120.0。

我期望输出为,

第一圈:list

第二轮:ce_strike_sell = 100.0

第3次循环:ce_strike_sell = 110.0

我不确定是否有办法做到这一点,因为我对熊猫来说还是一个新手

3 个答案:

答案 0 :(得分:1)

这是因为行:

ratio_row = prem_ce.index[prem_ce['prem_ratio'] == ratio]

正在选择prem_ratio等于ratio的所有索引,并且在数据框中有多个行具有相同的prem_ratio

答案 1 :(得分:1)

您获得列表的原因是,prem_ce['StrikePrice'][ratio_row]是一个系列,而属性values可以获取该系列的值列表。

更容易就是:

prem_ce[prem_ce['prem_ratio'] >= 2]['StrikePrice']

这又是一个系列。

答案 2 :(得分:1)

我无法理解为什么我会得到一个列表,第一个列表只有一个值而另外两个有2个值。

您的逻辑如下每行

  1. 如果ratio_row >= 2,请找到ratio == ratio_row的所有比率,其中ratio_row是该行的比率
  2. 有一行ratio == 3,但有两行ratio == 2。因此,第一行将获得1个值,后两行将获得2个值。
  3. 目前尚不清楚为什么您希望每行只有一个值,或者您想要的预期输出值。