我有一个数据框d1:
将熊猫作为pd导入
df1 = pd.DataFrame({('sw1', '2020-01-01 00:00:00'): {'A1': 5.496714153011234,
'B1': 4.536582307187538,
'C1': 6.465648768921554},
('sw1', '2020-01-01 00:15:00'): {'A1': 5.417291254384371,
'B1': 5.089825801985299,
'C1': 5.32977925506902},
('sw2', '2020-01-01 00:00:00'): {'A1': 5.593791702359273,
'B1': 3.1212115651371235,
'C1': 4.546877553622513},
('sw2', '2020-01-01 00:15:00'): {'A1': 6.385936244917259,
'B1': 4.66918047921994,
'C1': 5.303265379619803},
('clust', ''): {'A1': 1, 'B1': 2, 'C1': 3}})
df1.columns.names = ['None', 'dtime']
df1.index.names = ['dev']
df1
>>> df1
None sw1 sw2 clust
dtime 2020-01-01 00:00:00 2020-01-01 00:15:00 2020-01-01 00:00:00 2020-01-01 00:15:00
dev
A1 5.496714 5.417291 5.593792 6.385936 1
B1 4.536582 5.089826 3.121212 4.669180 2
C1 6.465649 5.329779 4.546878 5.303265 3
我想将其转换为以下格式:
>>> df2
cust 1 2 3
dev A1 B1 C1
sw sw1 sw2 sw1 sw2 sw1 sw2
dtime
2020-01-01 00:00:00 5.496714 5.593792 4.536582 3.121212 6.465649 4.546878
2020-01-01 00:15:00 5.417291 6.385936 5.089826 4.669180 5.329779 5.303265
该怎么做?
(我要添加此文本是因为stackoverflow给我以下错误:“看来您的帖子主要是代码;请添加更多详细信息。”,所以我需要在帖子中添加一些其他文本。请忽略)
答案 0 :(得分:3)
第一个MultiIndex
列clust
用元组选择索引,lifecycle policy用append=True
索引以避免丢失dev
值,然后用{{3} }和DataFrame.set_index
,最后更改顺序在MultiIndex
中,并按DataFrame.stack
和DataFrame.unstack
排序:
df = (df1.set_index(('clust',''), append=True)
.rename_axis(index=('dev','clust'), columns=('sw','dtime'))
.stack()
.unstack([0,1])
.reorder_levels((2,1,0), axis=1)
.sort_index(axis=1)
)
print (df)
clust 1 2 3 \
dev A1 B1 C1
sw sw1 sw2 sw1 sw2 sw1
dtime
2020-01-01 00:00:00 5.496714 5.593792 4.536582 3.121212 6.465649
2020-01-01 00:15:00 5.417291 6.385936 5.089826 4.669180 5.329779
clust
dev
sw sw2
dtime
2020-01-01 00:00:00 4.546878
2020-01-01 00:15:00 5.303265
通过DataFrame.reorder_levels
重塑并转置的相似解法:
df = (df1.set_index(('clust',''), append=True)
.rename_axis(index=('dev','clust'), columns=('sw','dtime'))
.stack(0)
.T
.reorder_levels((1,0,2), axis=1)
)
print (df)
clust 1 2 3 \
dev A1 B1 C1
sw sw1 sw2 sw1 sw2 sw1
dtime
2020-01-01 00:00:00 5.496714 5.593792 4.536582 3.121212 6.465649
2020-01-01 00:15:00 5.417291 6.385936 5.089826 4.669180 5.329779
clust
dev
sw sw2
dtime
2020-01-01 00:00:00 4.546878
2020-01-01 00:15:00 5.303265