2017-07-26 106 views
3

我一直在嘗試通過DataFrame或應用函數進行迭代,以更改基於其他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 

而且我想設置一組爲每個個案,有這樣的想法:

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' 

我曾嘗試。適用(功能)使用,因爲據我所知,你不應該修改一個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) 

,但我不斷收到這樣的錯誤: 類型錯誤:字符串索引必須是整數,而不是str的

如何遍歷一個數據幀的任何想法,看了一些列,並在此基礎上,爲另一列設置值?

謝謝!

回答

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

這個工程,所以如果有一個投票,請解釋。 – ivan7707

+1

這工作完美(只需大寫字母的小調整)。謝謝! @ ivan7707 –

3

這個怎麼樣?

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 
+0

它工作完美!謝謝! –

+0

@RodolfoOrozco,很高興幫助:) – MaxU

相關問題