-
MM们
MultiIndex如果有必要,可以通过整数除法和对数组取模来创建 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 Units0 543 1001 553 4202 513 1103 243 5004 450 3005 400 200或者通过索引创建新的 DataFrame - 配对和取消配对值:#pandas 0.24+a = s.to_numpy()#pandas below#a = s.valuesdf = pd.DataFrame({'E_F':a[::2], 'Units':a[1::2]})print (df) E_F Units0 543 1001 553 4202 513 1103 243 5004 450 3005 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 Units0 543 1001 553 4202 513 1103 243 5004 450 3005 400 200
-
桃花长相依
我使用zip并s构建s.shift数据框并reindex仅选择奇数行:pd.DataFrame(list(zip(s.shift(), s)), columns=['E_F', 'Units']).reindex(index=range(1,s.size,2))Out[225]: E_F Units1 543.0 1003 553.0 4205 513.0 1107 243.0 5009 450.0 30011 400.0 200
-
RISEBY
使用此代码:>>> 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 Units0 100 5431 420 5532 110 5133 500 2434 300 4505 200 400>>>