我有一个DataFrame(称为signal
),它是一个具有5列的简单时间序列。其.describe()
如下所示:
ES NK NQ YM
count 5294.000000 6673.000000 4798.000000 3415.000000
mean -0.000340 0.000074 -0.000075 -0.000420
std 0.016726 0.018401 0.023868 0.015399
min -0.118724 -0.156342 -0.144667 -0.103101
25% -0.008862 -0.010297 -0.011481 -0.008162
50% -0.001422 -0.000590 -0.001747 -0.001324
75% 0.007069 0.009163 0.009841 0.006304
max 0.156365 0.192686 0.181245 0.132630
我想在每一行上应用一个简单的函数,并接收回具有相同尺寸的矩阵:
weights = -2*signal.subtract( signal.mean(axis=1), axis=0).divide( signal.sub( signal.mean(axis=1), axis=0).abs().sum(axis=1), axis=0 )
但是,当我运行此行时,程序被卡住了。我相信这个问题是由于nans长度/状态的不同所致。删除nan /填充它不是一个选择,对于任何给定的具有nan的行,我希望将该nan从计算中简单排除。临时解决方案是使用.iterrows()
迭代进行此操作,但这不是有效的解决方案。
有没有针对此问题的明智解决方案?
答案 0 :(得分:2)
问题是,默认情况下,熊猫mean
和sum
方法已经排除了NaN
值(请参阅链接文档中skipna
关键字的描述)。另外,subtract
和divide
允许使用fill_value
关键字arg:
fill_value:无或浮点值,默认为无
在计算之前用此值填充现有的缺失(NaN)值以及成功完成DataFrame对齐所需的任何新元素。如果两个对应的DataFrame位置中的数据均丢失,则结果将丢失
因此,您可以通过在对fill_value=0
的调用中设置subtract
和对fill_value=1
的调用中divide
来获得所需的内容。
但是,我怀疑默认行为(NaN
和mean
,sum
,NaN - anything = NaN
中的NaN\anything = NaN
被忽略了)是您真正想要的。在这种情况下,您的问题与NaN
并没有直接关系,因此您将必须澄清语句“当我运行此行时,程序会卡住”,以便获得有用的答案。