我遇到了一些根据DataFrame计算单个值的代码,并将其存储为DataFrame的属性,而不是单独的变量或新列。
这是一个例子。投资组合有两个证券,每个证券都有价格和数量。
import pandas
data = {"Prices" : [83.28, 107.38], "Quantities" : [125.926, 7241.531]}
portfolio = pandas.DataFrame(data, index = ["BND", "VTI"], columns = ["Prices", "Quantities"])
portfolio.value = portfolio["Prices"].dot(portfolio["Quantities"])
以这种方式存储value
有什么好处,而不是单独的变量或新的数据列?那是
portfolio["Value"] = portfolio["Prices"].dot(portfolio["Quantities"])
从技术上讲,后者可能会占用更多内存,因为数据集中的每个观察值都会重复这些值,但实际上,这些投资组合大约有1000个证券,因此它不是问题。
将值作为DataFrame的属性进行分配并不会在酸洗中存活,但是还有其他缺点吗?有一些隐藏的好处吗?
答案 0 :(得分:1)
我猜这是编码错误。我以前做过这个。
假设:
df = pd.DataFrame([1], ['x'])
我以为我有:
df['y'] = 2
但实际上并没有。
后来,我:
df.y = df.x.sum()
如果我实际完成df['y'] = 2
,df.y
会指向系列df['y']
。但是因为我没有,df.y = df.x.sum()
将df['x']
的标量和分配给y
的属性df
。
换句话说,我认为没有任何好处。