gpt4 book ai didi

python - Pandas 数据透视表到 One_hot

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

我想将 pandas df 转换为 One_hot pandas df。最好的描述方式可能是举个例子:

我的 df 看起来像这样:

ID|DEV |STATE|
1 |DEV1|on
2 |DEV2|on
3 |DEV1|off
3 |DEV3|on
3 |DEV3|off

我知道非唯一 ID 不好,我正在努力。

然后我旋转表格:

data.pivot_table(index='ID', columns=['DEV'], values='STATE', dropna=True, aggfunc='first')

结果如下

ID|DEV1|DEV2|DEV3
1 |on | NaN| NaN
2 | NaN| on | NaN
3 | off| NaN| on
4 | NaN| NaN| off

现在我想得到这样的东西:

ID|DEV1.on|DEV1.off|DEV2.on|DEV3.on|DEV3.off
1 | 1 | 0| 0| 0| 0
2 | 0 | 0| 1| 0| 0
3 | 0 | 1| 0| 1| 0
4 | 0 | 0| 0| 0| 1

我知道如何加入列名,但我不知道如何获得“one-hot”-Style。也许使用 aggfunc 是可能的?

你能帮帮我吗?

法比安

最佳答案

使用get_dummies使用分隔符 . 连接列,按 ID 列索引 set_index最后得到每个索引的 max:

df['join'] = df['DEV'] + '.' + df['STATE']
df = pd.get_dummies(df.set_index('ID')['join']).max(level=0)
print (df)
DEV1.off DEV1.on DEV2.on DEV3.off DEV3.on
ID
1 0 1 0 0 0
2 0 0 1 0 0
3 1 0 0 1 1

另一种使用 MultiIndex 并通过 unstack reshape 的解决方案- 但这是必要的 swaplevel , sort_index最后展平 MultiIndex:

df = (pd.get_dummies(df.set_index(['ID','DEV'])['STATE'])
.max(level=[0,1])
.unstack(fill_value=0)
.swaplevel(0,1, axis=1)
.sort_index(axis=1))

df.columns = df.columns.map('.'.join)
print (df)
DEV1.off DEV1.on DEV2.off DEV2.on DEV3.off DEV3.on
ID
1 0 1 0 0 0 0
2 0 0 0 1 0 0
3 1 0 0 0 1 1

关于python - Pandas 数据透视表到 One_hot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53481430/

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