在pandas df中,我有一个列$.each(oldData, function(i, e) {
console.log(oldData[e], $scope.form[e]);
oldData[e] = '';
console.log(oldData[e], $scope.form[e]);
});
,其中包含各种操作系统分类,例如['name']
等。这是字符串。
我希望使用此函数来创建一个更通用的新列'Windows 7', 'Windows 10', 'Linux', 'Mobile iOS 9.1', 'OS X 10.12'
:
['type']
当我通过传入单个字符串变量测试函数时,它正常工作,但由于某种原因,当我将函数应用于这样的df时,它只返回"其他"对于每一行。
def name_group(row):
if 'Windows' in row:
name = 'Microsoft Windows'
elif 'iOS' in row:
name = 'Apple iOS'
elif 'OS X' in row:
name ='Apple Macintosh'
elif 'Macintosh' in row:
name = 'Apple Macintosh'
elif 'Linux' in row:
name = 'GNU/Linux'
else:
name = 'Other'
return name
有关可能导致此问题的任何想法?
答案 0 :(得分:0)
您需要使用Series.apply
传递列name
:
new_df['type'] = new_df['name'].apply(name_group)
但是如果想要使用DataFrame.apply
,则需要lambda
函数并传递列名:
new_df['type'] = new_df.apply(lambda x: name_group(x['name']), axis=1)