我在Python中有一个y
系列,值分别是Accepted
和Rejected
我想为Accepted
创建一个值为1、为Rejected
创建一个值为0的新数据帧。
我试图遍历y
的值并写入一个新的dfdummy
。到目前为止我的进步是
dummy=pd.DataFrame()
i=0
for i in range(0,len(y)):
if y[i]=='Approved':
dummy[i:]==1
else:
dummy[i:]==0
但我觉得我偏离了轨道。有人能帮我吗?
这个系列看起来是这样的:
y
Accepted
Rejected
Accepted
Accepted
Accepted
期望的输出应该是
dummy
1
0
1
1
1
最佳答案
这里不需要循环,因为很慢最好是通过转换为True/False
s或使用0,1
将布尔掩码转换为integer
到numpy.where
:
df['dummy'] = (df['y']=='Approved').astype(int)
df['dummy'] = np.where(df['y']=='Approved', 1, 0)
您的解决方案应该更改(循环缓慢的解决方案):
print (df)
0 Accepted
1 Rejected
2 Accepted
3 Accepted
4 Accepted
out = []
for i in range(0,len(df)):
if df.loc[i, 'y']=='Accepted':
out.append(1)
else:
out.append(0)
print (out)
[1, 0, 1, 1, 1]
df['dummy'] = out
print (df)
y dummy
0 Accepted 1
1 Rejected 0
2 Accepted 1
3 Accepted 1
4 Accepted 1