作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设你有一个数据框
month 1 2 3
year
2019 a b c
2020 d e f
我想要的是一个转换后的数据框,其中行名(年)和列名(月)作为索引:
data
2019-01-01 a
2019-02-01 b
2019-03-01 c
2020-01-01 d
2020-02-01 e
2020-03-01 f
在 Pandas 中是否有一种优雅的方法来做到这一点?
# this builds the dataframe
import numpy as np
import pandas as pd
from datetime import date
df = pd.DataFrame(np.array([['a', 'b', 'c'], ['d', 'e', 'f']]), columns = [1, 2, 3], index = [2019, 2020])
df.columns.name = "month"
df.index.name = "year"
所需的数据框:
# this builds the desire dataframe
desired_index = [date(2019,1,1), date(2019,2,1), date(2019,3,1), date(2020,1,1), date(2020,2,1), date(2020,3,1)]
desired_df = pd.DataFrame(np.array(['a', 'b', 'c', 'd', 'e', 'f']), columns = ['data'], index = desired_index)
最佳答案
使用 DataFrame.stack
与 Series.to_frame
到一栏 DataFrame
然后转换扁平化 MultiIndex
到列表理解中的日期时间 f-string
s:
df = df.stack().to_frame('data')
df.index = pd.to_datetime([f'{y}-{m}-1' for y, m in df.index])
print (df)
data
2019-01-01 a
2019-02-01 b
2019-03-01 c
2020-01-01 d
2020-02-01 e
2020-03-01 f
使用
DataFrame.melt
的替代解决方案和正确的顺序
DataFrame.sort_index
:
df = df.reset_index().melt('year', value_name='data')
df.index = pd.to_datetime(df[['year', 'month']].assign(day=1))
df = df[['data']].sort_index()
print (df)
data
2019-01-01 a
2019-02-01 b
2019-03-01 c
2020-01-01 d
2020-02-01 e
2020-03-01 f
关于python-3.x - 如何从具有(column_name/row_name/1)作为新(日期)索引的数据框中获取系列(列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64817429/
假设你有一个数据框 month 1 2 3 year 2019 a b c 2020 d e f 我想要的是一个转换后的数据框,其中行名(年)和列名(月)作为索
我是一名优秀的程序员,十分优秀!