如何从两列创建虚拟数据帧?

2024-09-27 17:51:59 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有数据帧:

a|stg1
a|stg2
a|stg3
b|stg2
b|stg3
c|stg1

我想得到一个数据帧,里面有这样的假人:

  stg1|stg2|stg3
a|  1 |  1 |  1
b|  0 |  1 |  1
c|  1 |  0 |  0

我曾经尝试过使用熊猫的get_假人,但没有成功 我还尝试创建一个包含两个for循环的字典,尽管它可以工作,但需要很长时间,而且必须有一个更优雅、更高效的解决方案

或者它更像是一个透视表之类的东西?但是我应该使用什么功能呢? 每个值对都是唯一的


Tags: 数据功能forget字典解决方案stg2stg3
2条回答

默认情况下,可以使用^{}形成频率表:

# 0 is the column name of `a, b, c` and 1 is that of `stg*`
>>> res = pd.crosstab(df[0], df[1])
>>> res

1  stg1  stg2  stg3
0
a     1     1     1
b     0     1     1
c     1     0     0

左上角的10是原始数据帧中的列的名称;它们成为索引的名称&;结果的列。如果不需要:

>>> res = res.rename_axis(index=None, columns=None)
>>> res

   stg1  stg2  stg3
a     1     1     1
b     0     1     1
c     1     0     0

您可以使用公共透视表(“a”和“B”是您的列名):

pv = pd.pivot_table(df, index='A', columns='B', aggfunc='size', fill_value=0)
pv.index.name=None
pv.columns.name=None

print(pv)

输出:

   stg1  stg2  stg3
a   1.0   1.0   1.0
b   0.0   1.0   1.0
c   1.0   0.0   0.0

相关问题 更多 >

    热门问题