gpt4 book ai didi

python - 如何获得有条件的假人

转载 作者:行者123 更新时间:2023-12-01 08:57:14 25 4
gpt4 key购买 nike

我有下一张表:

| Name | TagID |  Key  |
|------|-------|-------|
| a | 285 | 1 |
| a | 101 | 0 |
| a | 200 | 1 |
| a | 1601 | 0 |
| a | 1991 | 0 |
| a | 7075 | 0 |
| b | 285 | 1 |
| b | 132 | 0 |
| b | 101 | 0 |
| b | 200 | 1 |
| b | 165 | 0 |
| b | 1617 | 0 |
| b | 160 | 0 |
| b | 334 | 1 |
| c | 285 | 1 |
| c | 1123 | 1 |
| c | 200 | 0 |

我想要获得一个形状为(唯一的Names ×唯一的TagID)的表格,如果TagIDKey,则为1 = 1.

问题:如何以最有效的方式做到这一点?只是,我有大约 100 万行和 3k 个唯一的 TagID

例如:

|   | 101 | 132 | 160 | 165 | 200 | 285 | 334 | 1123 | 1601 | 1617 | 1991 | 7075 |
|---|-----|-----|-----|-----|-----|-----|-----|------|------|------|------|------|
| a | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| b | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| c | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |

最佳答案

使用pivot ,替换缺失值并转换为整数或 set_indexunstack :

df1 = df.pivot('Name','TagID','Key').fillna(0).astype(int)
#alternative
#df1 = df.set_index(['Name','TagID'])['Key'].unstack(fill_value=0)
print (df1)
TagID 101 132 160 165 200 285 334 1123 1601 1617 1991 7075
Name
a 0 0 0 0 1 1 0 0 0 0 0 0
b 0 0 0 0 1 1 1 0 0 0 0 0
c 0 0 0 0 0 1 0 1 0 0 0 0

编辑:如果得到:

ValueError: Index contains duplicate entries, cannot reshape

这意味着NameTagID中存在重复项,因此需要聚合max:

df2 = df.groupby(['Name','TagID'])['Key'].max().unstack(fill_value=0)
#alternative
df2 = df.pivot_table(index='Name',
columns='TagID',
values='Key',
fill_value=0,
aggfunc='max')

print (df2)
TagID 101 132 160 165 200 285 334 1123 1601 1617 1991 7075
Name
a 0 0 0 0 1 1 0 0 0 0 0 0
b 0 0 0 0 1 1 1 0 0 0 0 0
c 0 0 0 0 0 1 0 1 0 0 0 0

关于python - 如何获得有条件的假人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52719755/

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