gpt4 book ai didi

python - Pandas - get_dummies 与选定的集合

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

使用以下数据框:

>>> df = pd.DataFrame(data={'category':['a','b','c'],'val':[1,2,3]})
>>> df
category val
0 a 1
1 b 2
2 c 3

我连接生成的虚拟列并删除原始列,如下所示:

>>> df = pd.concat([df, pd.get_dummies(df['category'], prefix='cat')], axis=1).drop(['category'], axis=1)
>>> df
val cat_a cat_b cat_c
0 1 1 0 0
1 2 0 1 0
2 3 0 0 1

然后,我为 future 的未知值添加另一列,如下所示:

>>> df['cat_unkown'] = 0
>>> df
val cat_a cat_b cat_c cat_unkown
0 1 1 0 0 0
1 2 0 1 0 0
2 3 0 0 1 0
<小时/>

现在我想在新的 DataFrame 上 get_dummies,但将其映射到可用列,这意味着:如果存在类别列,则使用它,否则将 cat_unkown 设置为 1

例如以下 DataFrame:

  category  val
0 a 1
1 b 2
2 d 3

结果将是:

   val  cat_a  cat_b  cat_c  cat_unkonw
0 1 1 0 0 0
1 2 0 1 0 0
2 3 0 0 0 1

什么是有效的方法?

更新:只是详细说明一下,在我的现实问题中,我在 get_dummies 生成结果后获得了数据帧。

最佳答案

我相信你需要:

df = pd.DataFrame(data={'category':['a','b','c'],'val':[1,2,3]})  
df = pd.concat([df, pd.get_dummies(df['category'], prefix='cat')], axis=1).drop(['category'], axis=1)
df['cat_unkown'] = 0
print (df)
val cat_a cat_b cat_c cat_unkown
0 1 1 0 0 0
1 2 0 1 0 0
2 3 0 0 1 0

df1 = pd.DataFrame(data={'category':['a','b','d'],'val':[1,2,3]})
df1 = pd.concat([df1, pd.get_dummies(df1['category'], prefix='cat')], axis=1).drop(['category'], axis=1)
print (df1)
val cat_a cat_b cat_d
0 1 1 0 0
1 2 0 1 0
2 3 0 0 1
<小时/>
#get all columns names without val
orig_cols = df.columns.difference(['val'])
print (orig_cols)
Index(['cat_a', 'cat_b', 'cat_c', 'cat_unkown'], dtype='object')

#create dictionary with all columns from df1 which are not in df (also removed vals column)
dif = dict.fromkeys(df1.columns.difference(['val'] + orig_cols.tolist()), 'cat_unkown')
print (dif)
{'cat_d': 'cat_unkown'}

#rename columns and if-else for possible multiplied renamed columns
df3 = (df1.rename(columns=dif)
.assign(cat_unkown = lambda x: x.pop('cat_unkown').max(axis=1)
if isinstance(x['cat_unkown'], pd.DataFrame)
else x.pop('cat_unkown'))
.reindex(columns=orig_cols, fill_value=0)
)

print (df3)
cat_a cat_b cat_c cat_unkown
0 1 0 0 0
1 0 1 0 0
2 0 0 0 1

关于python - Pandas - get_dummies 与选定的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53634220/

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