3 回答

TA貢獻1886條經(jīng)驗 獲得超2個贊
MultiIndex如果有必要,可以通過整數(shù)除法和對數(shù)組取模來創(chuàng)建 Series 中的匹配對和非對值,長度為Series,整形為Series.unstack:
arr = np.arange(len(s))
s.index = [arr// 2, arr % 2]
df = s.unstack()
df.columns = ['E_F','Units']
print (df)
E_F Units
0 543 100
1 553 420
2 513 110
3 243 500
4 450 300
5 400 200
或者通過索引創(chuàng)建新的 DataFrame - 配對和取消配對值:
#pandas 0.24+
a = s.to_numpy()
#pandas below
#a = s.values
df = pd.DataFrame({'E_F':a[::2], 'Units':a[1::2]})
print (df)
E_F Units
0 543 100
1 553 420
2 513 110
3 243 500
4 450 300
5 400 200
另一個想法(像第一個 2 一樣慢)是測試 index 的第一個值是否為Eor F、 createSeries和MultiIndexby GroupBy.cumcount:
idx = pd.Series(np.where(s.index.str[0].isin(['E','F']), 'E_F','Units'))
s.index = [idx.groupby(idx).cumcount(), idx]
df = s.unstack()
print (df)
E_F Units
0 543 100
1 553 420
2 513 110
3 243 500
4 450 300
5 400 200

TA貢獻1860條經(jīng)驗 獲得超8個贊
我使用zip并s構(gòu)建s.shift數(shù)據(jù)框并reindex僅選擇奇數(shù)行:
pd.DataFrame(list(zip(s.shift(), s)), columns=['E_F', 'Units']).reindex(index=range(1,s.size,2))
Out[225]:
E_F Units
1 543.0 100
3 553.0 420
5 513.0 110
7 243.0 500
9 450.0 300
11 400.0 200

TA貢獻1856條經(jīng)驗 獲得超5個贊
使用此代碼:
>>> df = pd.DataFrame({i: pd.Series(x.values.ravel())
for i, x in pd.DataFrame(s).T.groupby(lambda x: x[0] in ['E', 'F'], axis=1)})
>>> df.columns = ['E_F', 'Units']
>>> df
E_F Units
0 100 543
1 420 553
2 110 513
3 500 243
4 300 450
5 200 400
>>>
添加回答
舉報