我有多个包含股票价格的数据框,我希望将这些数据框对齐成一个仅包含所有股票收盘价的数据框。
我希望所有数据框中的所有日期都会出现在date-column(index)和"NA“中,以防股票在该日期没有收盘价。
具有两个数据帧(df1和df2)的示例:
In [5]: df1
Out[5]:
Open High Low Close
Date1
2012-01-05 22.00 22.66 23.11 24.04
2012-01-04 24.04 23.80 23.08 22.16
2012-01-03 22.16 21.27 20.42 21.24
2012-01-01 21.24 22.30 22.52 22.30
In [7]: df2
Out[7]:
Open High Low Close
Date1
2012-01-07 23.00 21.66 25.11 21.04
2012-01-06 22.00 22.66 23.11 24.04
2012-01-04 24.04 23.80 23.08 22.16
2012-01-02 22.16 21.27 20.42 21.24
2012-01-01 21.24 22.30 22.52 22.30现在我可以做
In [8]: frame=pd.DataFrame({"df1.Close":df1["Close"], "df2.Close":df2["Close"]})结果不出所料:
In [9]: frame
Out[9]:
df1.Close df2.Close
Date1
2012-01-01 22.30 22.30
2012-01-02 NaN 21.24
2012-01-03 21.24 NaN
2012-01-04 22.16 22.16
2012-01-05 24.04 NaN
2012-01-06 NaN 24.04
2012-01-07 NaN 21.04我需要如何更改代码才能对动态数量的数据帧执行相同的操作?现在,我有8个数据帧需要这样对齐。有没有办法遍历数据帧列表并像上面那样对齐它们-而不是手动绑定数据帧名称(比喻地说,就像df和df7一样)?
提前感谢并致以亲切的问候!德克
发布于 2013-06-09 02:22:12
如果你有一个列表中的数据框(我的意思是实际的数据框对象,而不是它们的名称),它看起来像这样:
dflist = [df1, df2, df3, df4, df5, df6, df7, df8]然后,下面的代码应该能做你想要的事情:
frame = {}
for idx, df in enumerate(dflist):
n = idx+1 # Since lists are 0-indexed
name = "df{0:d}.Close".format(n)
close = df["Close"]
frame[name] = close您可以使用字典理解来更简洁地完成这项工作,但在示例代码中,为了便于理解,我更喜欢更明确地拼写出来。作为参考,字典的理解应该是这样的:
{"df{0:d}.Close".format(idx+1): df["Close"] for idx, df in enumerate(dflist)}https://stackoverflow.com/questions/17002186
复制相似问题