python - Python pandas,如何转换数据框
问题描述
我有一个数据框 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 给了我以下错误:“看起来您的帖子主要是代码;请添加更多详细信息。”,所以我需要在帖子中添加一些额外的文本。请忽略。)
解决方案
使用按元组选择索引的第一MultiIndex
列和用于避免丢失值的索引,然后按and重塑,最后更改顺序并按and排序:clust
DataFrame.set_index
append=True
dev
DataFrame.stack
DataFrame.unstack
MultiIndex
DataFrame.reorder_levels
DataFrame.sort_index
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
与 reshape byDataFrame.stack
和 transpose 类似的解决方案:
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
推荐阅读
- javascript - jQuery AJAX JSON 数据被展平
- node.js - 用 Sequelize 返回外键的表数据
- wordpress - 仅在需要时将多部分编码标志添加到 WordPress 元框
- java - Thymleaf 模板无法评估与模型相关的表达式
- asp.net-mvc - 多个共享布局 mvc
- ruby-on-rails - 无法通过 React Native 应用调用验证 Rails API 中的 CSRF 令牌
- android - 如何更新视图位置
- php - 我在 cPanel 上放了 cron 作业命令,但它不起作用
- python - 如何将 __init__ 参数传递给使用 qmlRegisterType 注册的类?
- tfs-2015 - 如何使用户能够在 Backlog 视图中添加功能