我一直在尝试迭代DataFrame或应用函数,以便根据DataFrame中的其他2个列更改DataFrame特定列中的内容。
我有一个像:
df = pd.DataFrame({'Age_type' : pd.Series(['Adult','Adult','Child','Child']),
'Gender' : pd.Series(['Female','Male','Female','Female'])
})
Gender Age_type Group
0 Female Adult
1 Male Adult
2 Female Child
3 Female Child
我想为每个案例设置一个小组,并提出这个想法:
if gender == 'Female' and age_type == 'Adult':
group = 'Group A'
elif gender == 'Female' and age_type == 'Child':
group = 'Group B'
elif gender == 'Male' and age_type == 'Adult':
group = 'Group C'
elif gender == 'Male' and age_type == 'Child':
group = 'Group D'
我试过使用.apply(function),因为据我所知,你不应该在迭代时修改DataFrame(所以这会使for循环不是一个选项¿?)。
我试过了:
def set_group(data):
gender = data['Gender']
age_type = data['Age_type']
if gender == 'Female' and age_type == 'Adult':
data['Group'] = 'Group A'
elif gender == 'Female' and age_type == 'Child':
data['Group'] = 'Group B'
elif gender == 'Male' and age_type == 'Adult':
data['Group'] = 'Group C'
elif gender == 'Male' and age_type == 'Child':
data['Group'] = 'Group D'
return None
df['Group'].apply(set_group)
但我一直收到如下错误: TypeError:字符串索引必须是整数,而不是str
有关如何迭代DataFrame的任何想法,读取一些列,并基于此,设置另一列的值?
谢谢!
答案 0 :(得分:4)
这个怎么样?
In [96]: df
Out[96]:
Age_type Gender
0 Adult Female
1 Adult Male
2 Child Female
3 Child Female
In [97]: m = {'FemaleAdult': 'Group A',
...: 'FemaleChild': 'Group B',
...: 'MaleAdult': 'Group C',
...: 'MaleChild': 'Group D'}
In [98]: df['group'] = (df.Gender + df.Age_type).map(m)
In [99]: df
Out[99]:
Age_type Gender group
0 Adult Female Group A
1 Adult Male Group C
2 Child Female Group B
3 Child Female Group B
答案 1 :(得分:1)
试试这个:
dfx['group'] = ""
dfx['group'] = np.where((dfx['Gender']=='Female')&(dfx['Age_type']=='Adult'),'A', dfx['group'])
dfx['group'] = np.where((dfx['Gender']=='Female')&(dfx['Age_type']=='Child'),'B', dfx['group'])
dfx['group'] = np.where((dfx['Gender']=='Male')&(dfx['Age_type']=='Adult'),'C', dfx['group'])
dfx['group'] = np.where((dfx['Gender']=='Male')&(dfx['Age_type']=='Child'),'D', dfx['group'])