我有两个数据框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)
但是我仍然需要考虑状态是否相等,这就是代码结构令人困惑的地方
注意:某些状态可能不会同时出现在两个数据框中
答案 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