遍历一个数据框,然后根据两个条件从另一个数据框添加数据

时间:2019-04-13 19:59:44

标签: python pandas dataframe

我有两个数据框A和B,我要在数据框A中添加一列,然后根据数据框B中三列的值尝试填充它。

这是数据框B:

    Clinton    Trump       State
0   151581.0   130614.0    Alabama
1   68429.0    91087.0     California
2   62435.0    89199.0     Arizona
3   22927.0    72846.0     Alaska
4   58669.0    33928.0     Arkansas

这是数据框A:

    State       Education             Percentage
0   Alabama     NOHighSchoolPercent   0.85
1   Alabama     PostgraduatePercent   0.55
2   Alabama     BachelorsPercent      0.69
3   Arkansas    NOHighSchoolPercent   0.80
4   California  NOHighSchoolPercent   0.72

我想在A栏中添加一列“多数”,根据数据帧B中的投票数说“特朗普”或“克林顿”。第一个条件是州应匹配,第二个条件检查谁获得更多选票。

结果数据帧A应该看起来像这样:

        State       Education             Percentage   Majority
    0   Alabama     NOHighSchoolPercent   0.85         Clinton
    1   Alabama     PostgraduatePercent   0.55         Clinton
    2   Alabama     BachelorsPercent      0.69         Clinton
    3   Arkansas    NOHighSchoolPercent   0.80         Clinton
    4   California  NOHighSchoolPercent   0.72         Trump

我知道如何添加一列并分配一个条件,问题是条件在单独的数据帧(B)中的3列之间

我正在沿着这些思路思考

def get_result(votes_clinton, votes_trump):
    if votes_clinton > votes_trump
        return 'clinton'
    else
        return 'trump'

A['Majority'] = B['Clinton','Trump'].map(get_result)

但是我仍然需要考虑状态是否相等,这就是代码结构令人困惑的地方

注意:某些状态可能不会同时出现在两个数据框中

1 个答案:

答案 0 :(得分:2)

联接位于dfb中单个非重复的列上,因此map是合适的。设置索引,然后使用.idxmax(axis=1)

dfa['Majority'] = dfa.State.map(dfb.set_index('State').idxmax(1))

print(dfa)
#        State            Education  Percentage Majority
#0     Alabama  NOHighSchoolPercent        0.85  Clinton
#1     Alabama  PostgraduatePercent        0.55  Clinton
#2     Alabama     BachelorsPercent        0.69  Clinton
#3    Arkansas  NOHighSchoolPercent        0.80  Clinton
#4  California  NOHighSchoolPercent        0.72    Trump

dfb.set_index('State').idxmax(1)的剩余结果是一个由'State'索引的系列,可用于将'State'中的dfa映射到多数候选者。

State
Alabama       Clinton
California      Trump
Arizona         Trump
Alaska          Trump
Arkansas      Clinton
dtype: object