gpt4 book ai didi

python - 将一级混合头数据帧转换为 Pandas 中的垂直数据帧

转载 作者:行者123 更新时间:2023-12-01 14:31:23 26 4
gpt4 key购买 nike

以下数据框有多个列名称,格式为 item:district:

   date  price:dc  price:xc  price:cy  ratio:dc  ratio:xc  ratio:cy
0 2017 12 11 14 0.1 0.1 0.3
1 2018 14 12 15 0.2 0.7 0.6
2 2019 13 13 16 0.5 -0.2 0.8

是否可以按如下方式将其转换为新的数据框?谢谢。

   date district  price  ratio
0 2017 dc 12 0.1
1 2018 dc 14 0.2
2 2019 dc 13 0.5
3 2017 xc 11 0.1
4 2018 xc 12 0.7
5 2019 xc 13 -0.2
6 2017 cy 14 0.3
7 2018 cy 15 0.6
8 2019 cy 16 0.8

最佳答案

您可以创建MultiIndex,其中的列: by str.split由非 : 列在 DataFrame.set_index 之前创建索引然后通过 DataFrame.stack reshape :

df = df.set_index('date')
df.columns = df.columns.str.split(':', expand=True)
df = df.stack().rename_axis(('date','district')).reset_index()
print (df)
date district price ratio
0 2017 cy 14 0.3
1 2017 dc 12 0.1
2 2017 xc 11 0.1
3 2018 cy 15 0.6
4 2018 dc 14 0.2
5 2018 xc 12 0.7
6 2019 cy 16 0.8
7 2019 dc 13 0.5
8 2019 xc 13 -0.2

如果排序很重要,一种解决方案是创建有序分类:

df = df.set_index('date')
df.columns = df.columns.str.split(':', expand=True)

lvl = pd.CategoricalIndex(df.columns.levels[1],
ordered=True,
categories=df.columns.get_level_values(1).drop_duplicates())
df.columns = df.columns.set_levels(lvl, level=1)

df = df.stack().sort_index(level=[1,0]).rename_axis(('date','district')).reset_index()
print (df)
date district price ratio
0 2017 dc 12 0.1
1 2018 dc 14 0.2
2 2019 dc 13 0.5
3 2017 xc 11 0.1
4 2018 xc 12 0.7
5 2019 xc 13 -0.2
6 2017 cy 14 0.3
7 2018 cy 15 0.6
8 2019 cy 16 0.8

关于python - 将一级混合头数据帧转换为 Pandas 中的垂直数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59318716/

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