这里的想法是,每年,我都能够创建三个数据框(df1、df2、df3),每个数据框都包含不同的公司和股票价格('firm' 和 'price' 是 df1~df3 中的两列)。我想每年使用另一个数据框(下面命名为“商店”)来存储三个数据框。
这是我的代码:
store = pd.DataFrame(list(range(1967,2014)), columns=['year'])
for year in range(1967,2014):
....some codes that allow me to generate df1, df2 and df3 correctly...
store.loc[store['year']==year, 'df1']=df1
store.loc[store['year']==year, 'df2']=df2
store.loc[store['year']==year, 'df3']=df3
在此代码之后,我没有收到错误警告或任何内容。
但是在“存储”数据框中,列 'df1'、'df2' 和 'df3' 都是 'NAN' 值。
最佳答案
我认为 Pandas 为您的建议提供了更好的替代方案(理由如下)。
其中之一是 pandas.Panel
数据结构,这适用于您在这里所做的事情。
然而,正如 Wes McKinney(Pandas 的作者)在他的书 Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython 中指出的那样。 ,多维索引在很大程度上提供了更好的选择。
考虑以下替代代码:
dfs = []
for year in range(1967,2014):
....some codes that allow me to generate df1, df2 and df3
df1['year'] = year
df1['origin'] = 'df1'
df2['year'] = year
df2['origin'] = 'df2'
df3['year'] = year
df3['origin'] = 'df3'
dfs.extend([df1, df2, df3])
df = pd.concat(dfs)
这为您提供了一个包含 4 列的 DataFrame:
'firm'
, 'price'
, 'year'
, 和 'origin'
.这使您可以灵活地:
'year'
分层组织和 'origin'
:df.set_index(['year', 'origin'])
,比如说,'origin'
和 'price'
:df.set_index(['origin', 'price'])
groupby
s按不同级别您在问题中提出的建议使一个维度(起源)任意不同,并且很难想到这样做的优势。如果由于性能等原因需要沿某个维度进行拆分,则可以将 DataFrame 与标准 Python 数据结构更好地结合起来:
关于python - Python 中 DataFrames 的 DataFrame (Pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35932060/