gpt4 book ai didi

python - 将名称中带有日期的列转换为 Python 中的分隔行

转载 作者:太空宇宙 更新时间:2023-11-04 11:08:55 24 4
gpt4 key购买 nike

我已经得到了 this question in R 的答案,想知道如何在 Python 中实现这一点。

假设我们有一个像这样的 pandas DataFrame:

import pandas as pd
d = pd.DataFrame({'2019Q1':[1], '2019Q2':[2], '2019Q3':[3]})

显示如下:

   2019Q1  2019Q2  2019Q3
0 1 2 3

我怎样才能把它变成这样:

Year    Quarter    Value
2019 1 1
2019 2 2
2019 3 3

最佳答案

使用Series.str.split对于 MultiIndexexpand=True 然后按 DataFrame.unstack reshape ,最后一次数据清洗是用 Series.reset_indexSeries.rename_axis :

d = pd.DataFrame({'2019Q1':[1], '2019Q2':[2], '2019Q3':[3]})

d.columns = d.columns.str.split('Q', expand=True)
df = (d.unstack(0)
.reset_index(level=2, drop=True)
.rename_axis(('Year','Quarter'))
.reset_index(name='Value'))
print (df)
Year Quarter Value
0 2019 1 1
1 2019 2 2
2 2019 3 3

感谢@Jon Clements 的另一种解决方案:

df = (d.melt()
.variable
.str.extract('(?P<Year>\d{4})Q(?P<Quarter>\d)')
.assign(Value=d.T.values.flatten()))
print (df)
Year Quarter Value
0 2019 1 1
1 2019 2 2
2 2019 3 3

split 的替代方案:

df = (d.melt()
.variable
.str.split('Q', expand=True)
.rename(columns={0:'Year',1:'Quarter'})
.assign(Value=d.T.values.flatten()))
print (df)
Year Quarter Value
0 2019 1 1
1 2019 2 2
2 2019 3 3

关于python - 将名称中带有日期的列转换为 Python 中的分隔行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58767731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com