Py学习  »  Python

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

SteveS • 3 年前 • 1498 次点击  

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

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

正如您可能看到的,同一个键有多个值。 当我转动桌子时 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

请告诉我怎么做?有解决这种情况的最佳实践吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132089
 
1498 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Rodalm
Reply   •   1 楼
Rodalm    3 年前

另一个选择是使用 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']
})
Andrej Kesely
Reply   •   2 楼
Andrej Kesely    3 年前

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