我收到电子表格中显示的数据。
当它到达时,它看起来像这样:
import pandas as pd, numpy as np
data1 = [['symbol', 'appl', 'goog', None, 'msft', None, None, None],
['date' , 'close', 'close', 'volume', 'close', 'open', 'high', 'low'],
['1999-01-10', 100, 101, 10000, 102, 102, 104, 105],
['1999-01-11', 200, 201, 10000, 202, 202, 204, 205]]
df = pd.DataFrame(data1)
df
这会生成一个如下所示的表格:
我基本上需要通过按符号拆分或分组来迭代这些数据。
因此第一个数据框将仅包含 appl 的
[date, close]
列,
第二个将是
[date, close, volume]
对于 goog
最后一个对于 msft 来说是
[close, open, high, low]
我想做到这一点,如果可以创建一个多索引,并按符号分组,我应该能够正确地对数据帧进行切片并对其进行迭代
df = pd.DataFrame(data1)
df = df.ffill(axis=1)
#add first column by using first row
df.columns = df[:1].values.tolist()
df = df[1:]
df.columns = [df.columns, df[:1].values.tolist()]
#repeat for the fields row (2nd column above, now first column after above line)
#df.columns = pd.MultiIndex.from_product(df.columns.levels + df[:1].values.tolist())
#df.set_axis(pd.MultiIndex.from_product([df.columns, df[:1].values.tolist()]), axis=1)
df
最后一行不起作用。我尝试过的其他一些事情已被注释掉。
我确信无论如何都有更好的方法来做到这一点...请告知您是否可以。
谢谢
代码
# your code
df = pd.DataFrame(data1)
df = df.ffill(axis=1)
# edit code
idx = pd.MultiIndex.from_frame(df.iloc[:2, 1:].T, names=['symbol', 'ohlcv'])
out = (df.iloc[2:, 1:]
.set_axis(df.iloc[2:, 0].rename('date'))
.set_axis(idx, axis=1)
)
出
symbol appl goog msft
ohlcv close close volume close open high low
date
1999-01-10 100 101 10000 102 102 104 105
1999-01-11 200 201 10000 202 202 204 205