gpt4 book ai didi

python - 将 Pandas-Dataframe 从横截面数据重新排列为面板数据

转载 作者:行者123 更新时间:2023-12-01 00:36:56 27 4
gpt4 key购买 nike

我想将横截面重新排列成面板数据。

不幸的是,我无法使用 pd.melt 重新排列它。或pd.pivot公式。我还在堆栈溢出社区中搜索了解决方案,但没有找到符合问题的答案。

当前数据具有以下形式:

ID  FA_17   FA_18   TA_17   TA_18   OR_17   OR_18
-----------------------------------------------------
ID1 590 304 313 682 671 499
ID2 832 344 482 223 580 789
ID3 598 138 125 712 775 761

最后应将它们转换为以下顺序:

     FA      TA      OR
ID1 FA_17 TA_17 OR_17
ID1 FA_18 TA_18 OR_18
ID2 FA_17 TA_17 OR_17
ID2 FA_18 TA_18 OR_18
ID3 FA_17 TA_17 OR_17
ID3 FA_18 TA_18 OR_18

提前非常感谢您!

最佳答案

DataFrame.set_index 不带 _ 的所有列创建索引,然后通过Series.str.split创建列中的MultiIndex并通过 DataFrame.stack reshape ,最后通过DataFrame.reset_index删除索引中的MultiIndex的第二级与drop=True:

df = df.set_index('ID')
df.columns = df.columns.str.split('_', expand=True)
df = df.stack().reset_index(level=1, drop=True)

print (df)
FA OR TA
ID
ID1 590 671 313
ID1 304 499 682
ID2 832 580 482
ID2 344 789 223
ID3 598 775 125
ID3 138 761 712

或者使用wide_to_long :

df1 = (pd.wide_to_long(df, stubnames=['FA','TA','OR'], j='p', i='ID', sep='_')
.reset_index(level=1, drop=True)
.sort_index())
print (df1)
FA TA OR
ID
ID1 590 313 671
ID1 304 682 499
ID2 832 482 580
ID2 344 223 789
ID3 598 125 775
ID3 138 712 761

关于python - 将 Pandas-Dataframe 从横截面数据重新排列为面板数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57674851/

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