gpt4 book ai didi

python - Pandas - 创建一个带有 "dummy variable"的表

转载 作者:行者123 更新时间:2023-12-03 23:16:07 25 4
gpt4 key购买 nike

假设我有这个数据框

id | car      | sex    | income
-------------------------------
1 | European | Male | 45000
2 | Japanese | Female | 48000
3 | American | Male | 53000

有没有一种简单的方法来创建这个(使用 Pandas )?
  | id | car      | choice | sex    | income
1.| 1 | European | 1 | Male | 45000
2.| 1 | American | 0 | Male | 45000
3.| 1 | Japanese | 0 | Male | 45000
| ----------------------------------------
4.| 2 | European | 0 | Female | 48000
5.| 2 | American | 0 | Female | 48000
6.| 2 | Japanese | 1 | Female | 48000
| ----------------------------------------
7.| 3 | European | 0 | Male | 53000
8.| 3 | American | 1 | Male | 53000
9.| 3 | Japanese | 0 | Male | 53000

这个想法是在基础中获得“汽车”变量的每一种模式,并通过“选择”变量表明每个人都选择了哪一种。例如,在第一个表中,带有 id 的人1 选择了欧洲车,所以 choicecar 的行中等于 1是欧洲的,在 car 的行中为零等于美国或日本。

我已经编写了一些手动执行的代码(使用字典),但我想知道是否存在更清洁的解决方案。

(这是为了格式化数据,以便在 Stata 下使用 asclogit/nlogit)

最佳答案

我相信需要:

df = df.assign(choice = 1).set_index(['id','car'])
df = df.reindex(pd.MultiIndex.from_product(df.index.levels, names=df.index.names))

df = (df.assign(choice=df['choice'].fillna(0).astype(int))
.groupby(level=0).apply(lambda x: x.ffill().bfill())
.reset_index())
print (df)
id car sex income choice
0 1 American Male 45000.0 0
1 1 European Male 45000.0 1
2 1 Japanese Male 45000.0 0
3 2 American Female 48000.0 0
4 2 European Female 48000.0 0
5 2 Japanese Female 48000.0 1
6 3 American Male 53000.0 1
7 3 European Male 53000.0 0
8 3 Japanese Male 53000.0 0

说明 :

1.首先使用 1创建新列来自 assign
2.创建 MultiIndex来自 set_index
3.通过 MultiIndex.from_product 生成所有可能的组合并通过 reindex 创建新行
4.然后替换 NaN转至 0choice柱子
5.上次更换 NaN s 在所有其他列中通过向前和回填。

关于python - Pandas - 创建一个带有 "dummy variable"的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50551728/

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