使用Pandas Dataframe,我打算将值存储在Dataframe中,这些值是从存储在同一Dataframe中的数据计算出来的。
在没有lambda的情况下尝试,它无法正常工作:
def fences(data):
"""
Returns with the fences defined based on statistical quartiles
data: Raw data
return: DataFrame with X,Y,Z in columns ans Q1,Q2,Q3,IQR,F_l,F_h
"""
dp = pd.DataFrame(index=["Q1","Q2","Q3","IQR","F_l","F_h"], columns=["X","Y","Z"])
"""Calculate quartiles"""
dp.iloc[0:1,0:3] = record.iloc[:,1:4].quantile(.25)
dp.iloc[1:2,0:3] = record.iloc[:,1:4].quantile(.5)
dp.iloc[2:3,0:3] = record.iloc[:,1:4].quantile(.75)
"""Calculate IQRs"""
dp.iloc[3:4,0:3] = dp.iloc[2:3,0:3] - dp.iloc[0:1,0:3]
return dp
它会报告一个错误,如“ValueError:cannot broadcast input array from shape(2,3)into shape(1,3)”虽然我认为它可能会工作,因为索引和大小看起来很好,并且彼此适合:
所以我相信,解决方案可能是一个lambda函数,尽管它对我来说不是那么明显。
有人能帮我吗?
先谢谢你了。
更新日期:
形状如下:
Q1:
Q3:
因此,假设在减法之后,它给出(1,3),尽管它最终得到(2,3),这导致了错误......
行索引会导致这种混乱吗?
1条答案
按热度按时间fiei3ece1#
请允许我重新表述你的问题:
你的问题是“为什么两个向量
a
和b
的减法返回NaN
”?回复
a - b
没有工作,因为iloc
也考虑了索引,对dataframe进行了快照。这些行不仅仅是“数字”,还有其他信息,例如Q1
和Q3
索引的位置不同。你只是在寻找数字的减法。
一种方法是简单地使用
iloc
+reset_index()
返回纯标量数的副本。