gpt4 book ai didi

python - 如何融化 0 和 1 的数据帧并仅保留 1

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

这是我的原始数据框:

Label 1 | Label 2 | Label 3 | Variable 1 | Variable 2
-------------------------------------------------------
Blabla1 | Hop1 | Hip1 | 0 | 1
Blabla2 | Hop2 | Hip2 | 1 | 0
Blabla3 | Hop3 | Hip3 | 1 | 1
Blabla4 | Hop4 | Hip4 | 0 | 0

我的目标是将变量 1 和变量 2 排成一行(如果其中有 1)。对于上面的例子,异常(exception)的结果是:

Label 1 | Label 2 | Label 3 | Variable   
------------------------------------------
Blabla1 | Hop1 | Hip1 | Variable 2
Blabla2 | Hop2 | Hip2 | Variable 1
Blabla3 | Hop3 | Hip3 | Variable 1
Blabla3 | Hop3 | Hip3 | Variable 2

第 3 行重复两次,因为它有 2 个变量,第 4 行消失了,因为它只有 0。

我找到了一个使用 pandas.melt 函数完成工作的解决方案:

melt_DF = df.melt(id_vars=['Label 1', 'Label 2', 'Label 3'], value_vars=['Variable 1', 'Variable 2'])
melt_DF = melt_DF[melt_DF['value'] == 1].drop(columns='value', axis=1)

我的问题是我的 DataFrame 太大了,而且大多数值都是 0 。在删除第二行中的大部分行之前,创建第一个 melt_DF 使用了太多内存。有没有办法只在 1s 上应用熔化以节省内存?

最佳答案

让我们尝试使用 set_indexstackmask:

df.set_index(['Label 1', 'Label 2', 'Label 3'], inplace=True)
df = df.mask(df == 0).stack().reset_index()
df

输出:

   Label 1  Label 2  Label 3     level_3    0
0 Blabla1 Hop1 Hip1 Variable 2 1.0
1 Blabla2 Hop2 Hip2 Variable 1 1.0
2 Blabla3 Hop3 Hip3 Variable 1 1.0
3 Blabla3 Hop3 Hip3 Variable 2 1.0

然后,对列进行一些重命名和清理以匹配预期的输出:

df.mask(df1 == 0).rename_axis('Variable', axis=1).stack().reset_index().drop(0, axis=1)

输出:

   Label 1  Label 2  Label 3    Variable
0 Blabla1 Hop1 Hip1 Variable 2
1 Blabla2 Hop2 Hip2 Variable 1
2 Blabla3 Hop3 Hip3 Variable 1
3 Blabla3 Hop3 Hip3 Variable 2

关于python - 如何融化 0 和 1 的数据帧并仅保留 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56580960/

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