第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將系列索引(模式匹配)轉(zhuǎn)換為數(shù)據(jù)框列

將系列索引(模式匹配)轉(zhuǎn)換為數(shù)據(jù)框列

慕森卡 2022-03-09 21:28:24
我有一個系列(索引如圖所示)顯示為E1         543Units1_E   100E2         553Units2_E   420E3         513Units3_E   110F1         243Units1_F   500F2         450Units2_F   300F3         400Units3_F   200我希望將其轉(zhuǎn)換為數(shù)據(jù)框,以便輸出為 E_F     Units 543     100 553     420 513     110 243     500 450     300 400     200所以所需的輸出更像是一對值列。我不確定如何有效地完成此操作,我正在考慮使用正則表達式來過濾系列索引?
查看完整描述

3 回答

?
MM們

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


查看完整回答
反對 回復(fù) 2022-03-09
?
桃花長相依

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


查看完整回答
反對 回復(fù) 2022-03-09
?
RISEBY

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

>>> 


查看完整回答
反對 回復(fù) 2022-03-09
  • 3 回答
  • 0 關(guān)注
  • 251 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號