我有下面的df和更多的日期。你知道吗
df = {'Date': ('10/6/2015', '10/7/2015'),
'CAD 12M PR': (-7.4, -4.9),
'AUD 12M PR': (-2.3, -1.6),
'NOK 12M PR': (2.6, 8.6),
'SEK 12M PR': (6.7, 8.6),
'NZD 12M PR': (3.1, 2.9),
'EUR 12M PR': (2.7, 4.7),
'GBP 12M PR': (-3.6, -2.5),
'JPY 12M PR': (13.8, 15.7),
'CAD 1Y ZS': (3.1, 2.5),
'AUD 1Y ZS': (-1.7, -3.0),
'NOK 1Y ZS': (2.0, 1.8),
'SEK 1Y ZS': (2.6, 2.6),
'NZD 1Y ZS': (-4.5, -5.6),
'EUR 1Y ZS': (-3.8, -3.7),
'GBP 1Y ZS': (-1.6, -2.7),
'JPY 1Y ZS': (3.0, 2.1)
}
在df中有8种货币(加元、澳元、挪威克朗、瑞典克朗、新西兰元、欧元、英镑、日元)和2个不同的数据点:1200万PR(12个月价格回报)和1年ZS(1年z分数)。我想创建一个新的投资组合(列表)与前2个买入/卖出从这个数据框。对于第一类,我想将1200万欧元从大到小排列,将排名前4位的1200万欧元货币放入“买入区间”,将排名后4位的1200万欧元货币放入“卖出区间”。第二类是基于1Y Z。对于买入,我想要最高1Y Z的2种货币(来自排名前4位的12M PR桶),对于卖出,我想要最低1Y Z的2种货币(来自排名后4位的12M PR桶)。你知道吗
2015年6月10日,按1200万欧元计算,排名前4位的货币是日元、瑞典克朗、新西兰元和欧元。从这个角度来看,日元和瑞典克朗的1Y Z最高,因此它们是买入的货币。按1200万欧元计算,排名倒数第四的货币是加元、英镑、澳元和挪威克朗。从这一区间来看,澳元和英镑的1Y Z最低,因此它们是卖出价。你知道吗
为了在所有货币中获得最大的1200万美元的公共关系,我尝试了:
df.apply(lambda row: row.nlargest(1).values[-1] in [['CAD 12M PR', 'AUD 12M PR', 'NOK 12M PR', 'SEK 12M PR', 'NZD 12M PR', 'EUR 12M PR', 'GBP 12M PR', 'JPY 12M PR']], axis=1)
为了在所有货币中获得最小的1200万美元的公共关系,我试着:
df.apply(lambda row: row.nsmallest(1).values[-1] in [['CAD 12M PR', 'AUD 12M PR', 'NOK 12M PR', 'SEK 12M PR', 'NZD 12M PR', 'EUR 12M PR', 'GBP 12M PR', 'JPY 12M PR']], axis=1)
对于这两种情况,我都有一个错误:
TypeError: ("Cannot use method 'nlargest' with dtype object", 'occurred at index 0')
我的计划是使用上述代码将1200万PR分类到买入/卖出桶中,然后做同样的事情在1Y Z中找到第一/第二大/最小的-
您应该在原始数据帧上尝试
df.apply(lambda x: x.dtype)
。您将看到,所有数据都转换为object
,因为存在混合类型(日期是对象)。你知道吗例如:
当您在应用程序中尝试这些混合类型时:
您将得到:
。。。因为混合型。你知道吗
相反,您应该将日期设为
DateTimeIndex
,这样列中的所有数据类型都是浮动的。你知道吗这将为您提供可以应用
nlargest
的值。我没有应用任何附加逻辑,因为我假设您的主要问题是数据类型。你知道吗不过,你应该公布你的预期结果,以获得更完整的答案。我怀疑,如果你采用这种方法,你将在所有日期获得每种货币最大的1200万美元的公关(相当于
max
)。如果你想要前4名,你需要做一个额外的nlargest(4)
来捕获它们。例如为所有日期和货币提供4个最大的12米公关分数。这可能不是你想要的,很难说。你知道吗
相关问题 更多 >
编程相关推荐