迭代数据帧,计算列值,并将值设置为第三列

2024-04-27 05:13:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试迭代一个DataFrame或应用一个函数,以便基于DataFrame中另外两个列来更改DataFrame的特定列中的内容。在

我有一个df像:

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

我想为每个案例设置一个小组,有这样的想法:

^{pr2}$

我尝试过使用.apply(函数),因为据我所知,在迭代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

你知道如何迭代一个数据帧,读取一些列,并在此基础上为另一列设置值吗?在

谢谢!在


Tags: andchilddataframedfagedatatypegroup
2条回答

这个怎么样?在

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

试试这个:

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'])

相关问题 更多 >