gpt4 book ai didi

python - 具有多个变量名称和多个值名称的融化 Pandas 数据框

转载 作者:太空狗 更新时间:2023-10-29 18:00:42 27 4
gpt4 key购买 nike

如何使用多个变量名称和值来融合 Pandas 数据框?我有以下数据框,它在 for 循环中改变了它的形状。在 for 循环迭代之一中,它看起来像这样:

ID  Cat    Class_A   Class_B     Prob_A     Prob_B
1 Veg 1 2 0.9 0.1
2 Veg 1 2 0.8 0.2
3 Meat 1 2 0.6 0.4
4 Meat 1 2 0.3 0.7
5 Veg 1 2 0.2 0.8

我需要把它融化成这样:

ID  Cat    Class     Prob    
1 Veg 1 0.9
1 Veg 2 0.1
2 Veg 1 0.8
2 Veg 2 0.2
3 Meat 1 0.6
3 Meat 2 0.4
4 Meat 1 0.3
4 Meat 2 0.7
5 Veg 1 0.2
5 Veg 2 0.8

在 for 循环期间,数据框将包含不同数量的类及其概率。这就是为什么我正在寻找一种适用于我所有 for 循环迭代的通用方法。我看到这个questionthis但他们没有帮助!

最佳答案

你需要lreshape通过 dict 指定类别:

d = {'Class':['Class_A', 'Class_B'], 'Prob':['Prob_A','Prob_B']}
df = pd.lreshape(df,d)
print (df)
Cat ID Class Prob
0 Veg 1 1 0.9
1 Veg 2 1 0.8
2 Meat 3 1 0.6
3 Meat 4 1 0.3
4 Veg 5 1 0.2
5 Veg 1 2 0.1
6 Veg 2 2 0.2
7 Meat 3 2 0.4
8 Meat 4 2 0.7
9 Veg 5 2 0.8

更动态的解决方案:

Class = [col for col in df.columns if col.startswith('Class')]
Prob = [col for col in df.columns if col.startswith('Prob')]
df = pd.lreshape(df, {'Class':Class, 'Prob':Prob})
print (df)
Cat ID Class Prob
0 Veg 1 1 0.9
1 Veg 2 1 0.8
2 Meat 3 1 0.6
3 Meat 4 1 0.3
4 Veg 5 1 0.2
5 Veg 1 2 0.1
6 Veg 2 2 0.2
7 Meat 3 2 0.4
8 Meat 4 2 0.7
9 Veg 5 2 0.8

编辑:

lreshape现在没有记录,但将来可能会被删除(with pd.wide_to_long too)。

可能的解决方案是将所有 3 个函数合并为一个 - 也许是 melt,但现在还没有实现。也许在一些新版本的 Pandas 中。然后我的答案将被更新。

关于python - 具有多个变量名称和多个值名称的融化 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45662403/

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