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']
})
我有以下玩具数据框示例:
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']
})