Dataframe 具有多个值和一个热编码(Python、Pandas)的相同键?

Dataframe same key with multiple values and One Hot Encoding (Python, Pandas)?

我有以下玩具数据框示例:

import pandas as pd
df = pd.DataFrame({'id': [0, 0, 0], 'key':['role', 'role', 'role'], 'val': ['admin', 'local_usr', 'fin_dep_ds']})

如您所见,同一个键有多个值。 当我旋转 table 时,我使用的 agg 函数是 ",".join() 但最终目标是对这些值应用一种热编码:

pd.DataFrame(pd.pivot_table(df, \
                            values='val', \
                            index='id', \
                            columns='key', \
                            aggfunc=','.join).to_records())

最终目标:

id admin local_usr fin_dep_ds
0  1     1         1

请指教我该怎么做?解决这种情况的最佳做法是什么?

IIUC,.pivot_table()aggfunc="size" 产生你的结果:

x = df.pivot_table(index="id", columns="val", aggfunc="size").reset_index()
x.columns.name = None
print(x)

打印:

   id  admin  fin_dep_ds  local_usr
0   0      1           1          1

另一种选择是使用 pandas.crosstab

res = (
    pd.crosstab(index=df.id, columns=df.val)
      .reset_index()
      .rename_axis(columns=None)
)

输出:

>>> res

   id  admin  fin_dep_ds  local_usr
0   0      1           1          1

设置:

import pandas as pd

df = pd.DataFrame({
    'id': [0, 0, 0], 
    'key':['role', 'role', 'role'], 
    'val': ['admin', 'local_usr', 'fin_dep_ds']
})