使用 python 创建多列虚拟变量
Create dummy variable of multiple columns with python
我正在处理一个包含两列 ID 号的数据框。为了进一步研究,我想为这些 ID 号(使用两个 ID 号)制作一种虚拟变量。但是,我的代码不会合并两个数据框中的列。如何合并两个数据框中的列并创建虚拟变量?
数据框
import pandas as pd
import numpy as np
d = {'ID1': [1,2,3], 'ID2': [2,3,4]}
df = pd.DataFrame(data=d)
当前代码
pd.get_dummies(df, prefix = ['ID1', 'ID2'], columns=['ID1', 'ID2'])
期望输出
p = {'1': [1,0,0], '2': [1,1,0], '3': [0,1,1], '4': [0,0,1]}
df2 = pd.DataFrame(data=p)
df2
给猫剥皮的不同方法;我是这样做的——使用额外的 groupby
:
# pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).sum()
pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).max()
1 2 3 4
0 1 1 0 0
1 0 1 1 0
2 0 0 1 1
另一种选择是 stack
ing,如果您喜欢简洁:
# pd.get_dummies(df.stack()).sum(level=0)
pd.get_dummies(df.stack()).max(level=0)
1 2 3 4
0 1 1 0 0
1 0 1 1 0
2 0 0 1 1
如果在输出中需要指标使用 max
,如果需要计数值使用 sum
在 get_dummies
之后使用另一个参数并将值转换为字符串:
df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').max(level=0, axis=1)
#count alternative
#df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').sum(level=0, axis=1)
print (df)
1 2 3 4
0 1 1 0 0
1 0 1 1 0
2 0 0 1 1
我正在处理一个包含两列 ID 号的数据框。为了进一步研究,我想为这些 ID 号(使用两个 ID 号)制作一种虚拟变量。但是,我的代码不会合并两个数据框中的列。如何合并两个数据框中的列并创建虚拟变量?
数据框
import pandas as pd
import numpy as np
d = {'ID1': [1,2,3], 'ID2': [2,3,4]}
df = pd.DataFrame(data=d)
当前代码
pd.get_dummies(df, prefix = ['ID1', 'ID2'], columns=['ID1', 'ID2'])
期望输出
p = {'1': [1,0,0], '2': [1,1,0], '3': [0,1,1], '4': [0,0,1]}
df2 = pd.DataFrame(data=p)
df2
给猫剥皮的不同方法;我是这样做的——使用额外的 groupby
:
# pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).sum()
pd.get_dummies(df.astype(str)).groupby(lambda x: x.split('_')[1], axis=1).max()
1 2 3 4
0 1 1 0 0
1 0 1 1 0
2 0 0 1 1
另一种选择是 stack
ing,如果您喜欢简洁:
# pd.get_dummies(df.stack()).sum(level=0)
pd.get_dummies(df.stack()).max(level=0)
1 2 3 4
0 1 1 0 0
1 0 1 1 0
2 0 0 1 1
如果在输出中需要指标使用 max
,如果需要计数值使用 sum
在 get_dummies
之后使用另一个参数并将值转换为字符串:
df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').max(level=0, axis=1)
#count alternative
#df = pd.get_dummies(df.astype(str), prefix='', prefix_sep='').sum(level=0, axis=1)
print (df)
1 2 3 4
0 1 1 0 0
1 0 1 1 0
2 0 0 1 1