gpt4 book ai didi

python - 按 id 上的排名透视 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-03 15:48:03 25 4
gpt4 key购买 nike

我目前正在尝试通过 'rank' 上的 'id' 来旋转我的 Pandas DataFrame

print(df)

id rank year
0 key0 1 2011
1 key0 2 2012
2 key0 3 2013
3 key1 1 2014
4 key1 2 2015
5 key1 3 2016
6 key2 1 2017
7 key2 2 2018
8 key2 3 2019
根据 max('rank'),我想创建尽可能多的 'years' 列并根据升序赋予它们值
print(df)

id rank1 year1 rank2 year2 rank3 year3
0 key0 1 2011 2 2012 3 2013
1 key1 1 2014 2 2015 3 2016
2 key2 1 2017 2 2018 3 2019
我尝试了自己的解决方案(目前正在工作,但我有大约 200 万行并且不是很有效)
df2= df.melt(id_vars=["id", "rank"], value_vars=[elem for elem in df.columns if elem not ['id','rank']])
df2['col_name'] =df2['variable']+ (df2['rang']-1).astype('str')
df2.value.fillna(0, inplace = True)
df2= pd.pivot_table(df2, index=["id"], columns=["col_name"], values="value", aggfunc=max)
我知道这不是最佳解决方案并且会消耗内存,这就是我要求更好的解决方案的原因
提前致谢

最佳答案

使用 DataFrame.sort_values DataFrame.pivot , 排序 MultiIndex来自 DataFrame.sort_index 然后通过 f-string 将其展平s:

df1 = (df.sort_values(['id','rank'])
.pivot(index="id",columns="rank", values=["year","rank"])
.sort_index(axis=1, level=1))
df1.columns = [f'{a}{b}' for a, b in df1.columns]
df1 = df1.reset_index()
print (df1)
id rank1 year1 rank2 year2 rank3 year3
0 key0 1 2011 2 2012 3 2013
1 key1 1 2014 2 2015 3 2016
2 key2 1 2017 2 2018 3 2019

关于python - 按 id 上的排名透视 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63897557/

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