我正在构建一个假数据集来玩。我有一个名为patient_data的数据集,其中包含患者的信息:
patient_data = pd.DataFrame(np.random.randn(100,5),columns='id name dob sex state'.split())
这给了我100个观察样本,包括姓名,生日等变量
显然,其中一些(如姓名性和状态)是分类变量,并且附加随机数字是没有意义的。
所以"性别"我创建了一个函数,它将每个随机数< 0变为"男性"以及其他一切要读的女性。"我想创建一个名为" gender"的新变量。并将其存储在此变量中:
def malefemale(x):
if x < 0:
print('male')
else:
print('female')
然后我写了一个代码,将这个函数应用到数据框中,正式创建一个新的变量&#34;性别。&#34;
patient_data.assign(gender = patient_data['sex'].apply(malefemale))
但是当我输入&#34; patient_data&#34;在jupiter笔记本中,我没有看到更新的数据框包含这个新变量。似乎没有做任何事情。
是否有人知道我可以做些什么来将这个新的性别变量永久添加到我的patient_data数据框中,并且该功能正常工作?
答案 0 :(得分:1)
我认为您需要分配回来,对于新值,请使用numpy.where
:
patient_data = patient_data.assign(gender=np.where(patient_data['sex']<0, 'male', 'female'))
print(patient_data.head(10))
id name dob sex state gender
0 0.588686 1.333191 2.559850 0.034903 0.232650 female
1 1.606597 0.168722 0.275342 -0.630618 -1.394375 male
2 0.912688 -1.273570 1.140656 -0.788166 0.265234 male
3 -0.372272 1.174600 0.300846 1.959095 -1.083678 female
4 0.413863 0.047342 0.279944 1.595921 0.585318 female
5 -1.147525 0.533511 -0.415619 -0.473355 1.045857 male
6 -0.602340 -0.379730 0.032407 0.946186 0.581590 female
7 -0.234415 -0.272176 -1.160130 -0.759835 -0.654381 male
8 -0.149291 1.986763 -0.675469 -0.295829 -2.052398 male
9 0.600571 -1.577449 -0.906590 1.042335 -2.104928 female
答案 1 :(得分:0)
您需要将自定义功能更改为
def malefemale(x):
if x < 0:
return "Male"
else:
return "female"
然后只需应用自定义函数
patient_data['gender'] = patient_data['sex'].apply(malefemale)