我是熊猫的新手。
我试图根据另一列中的值获取特定值。然而输出是作为一个值列表而不是一个值,而我可以尝试用它来做,我想了解我做错了什么。 `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
我不确定是否有办法做到这一点,因为我对熊猫来说还是一个新手
答案 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个值。
您的逻辑如下每行:
ratio_row >= 2
,请找到ratio == ratio_row
的所有比率,其中ratio_row
是该行的比率。ratio == 3
,但有两行ratio == 2
。因此,第一行将获得1个值,后两行将获得2个值。目前尚不清楚为什么您希望每行只有一个值,或者您想要的预期输出值。