gpt4 book ai didi

python - Pandas reshape 数据框

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:32 25 4
gpt4 key购买 nike

我想 reshape 数据框

df = 
cell_name para1 para1_val para2 para2_val
0 Cell_1 tch_block 0.45 sdch_block 0.78
1 cell_1 dcr 2.3
2 cell_2 tch_block 0.8 sdcch_block 0.9
3 cell_2 dcr 1.9

我想要这样的输出

           cell_name   parameter   parameter_value
0 cell_1 tch_block 0.45
1 cell_1 sdcch_block 0.78
2 cell_1 dcr 2.3
3 cell_2 tch_block 0.8
4 cell_2 sdcch_block 0.9
5 cell_2 dcr 1.9

最佳答案

查看 pivot_table 的文档, 和 melt

这里的想法是,我们将为para1para2 分别创建一个dataframe,然后在最后连接结果

In [11]:
df.cell_name = df.cell_name.str.lower()

para1 列计算 para1 数据帧

In [16]:
para1_pivot = df.pivot_table(index='cell_name' , columns='para1' , values='para1_val').reset_index()
para1_pivot
Out[16]:
para1 cell_name dcr tch_block
0 cell_1 2.3 0.45
1 cell_2 1.9 0.80

In [20]:
para1 = pd.melt(para1_pivot , id_vars= 'cell_name' , var_name='parameter' , value_name='parameter_value')
para1
Out[20]:
cell_name parameter parameter_value
0 cell_1 dcr 2.30
1 cell_2 dcr 1.90
2 cell_1 tch_block 0.45
3 cell_2 tch_block 0.80

然后对para2做同样的事情

In [19]:
para2_pivot = df.pivot_table(index='cell_name' , columns='para2' , values='para2_val').reset_index()
para2_pivot
Out[19]:
para2 cell_name sdcch_block sdch_block
0 cell_1 NaN 0.78
1 cell_2 0.9 NaN

In [25]:
para2 = pd.melt(para2_pivot , id_vars= 'cell_name' , var_name='parameter' , value_name='parameter_value')
para2
Out[25]:
cell_name parameter parameter_value
0 cell_1 sdcch_block NaN
1 cell_2 sdcch_block 0.90
2 cell_1 sdch_block 0.78
3 cell_2 sdch_block NaN

然后连接结果

In [30]:
pd.concat([para1 , para2[para2.parameter_value.notnull()]])
Out[30]:
cell_name parameter parameter_value
0 cell_1 dcr 2.30
1 cell_2 dcr 1.90
2 cell_1 tch_block 0.45
3 cell_2 tch_block 0.80
1 cell_2 sdcch_block 0.90
2 cell_1 sdch_block 0.78

如果你想对你的最终框架进行排序检查sort_values

关于python - Pandas reshape 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33839242/

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