我刚刚开始使用python对工作中的数据进行一些分析,所以我真的可以在这里使用一些帮助:)
我有非洲国家的df和一堆指标以及另一个维度代表分组的df,如果一个国家在该组中,那么该国家的名称就在那里。
这是一张快照:
5
并希望为此df添加维度,告诉我该国家是否处于脆弱状态(以及其他分组)。所以我有另一个df与属于该类别的国家列表。
我使用isin实例来检查是否相等,但我真正想要的是在新维度“Fragile”中代替TRUE和FALSE,例如,TRUE值将被“Fragile”和FALSE值替换为“不脆弱“。
不言而喻,如果您看到任何改进此代码的方法,我非常渴望向专业人士学习!特别是如果您处于可持续发展目标统计领域。
# indicators df
df_indicators= pd.DataFrame({'Country': ['Algeria', 'Angola', 'Benin'],
'Commitment to CAADP Process': [np.nan, 0.1429, 0.8571]})
# groupings df
df_groupings= pd.DataFrame({'Fragile': ['Somalia', 'Angola', 'Benin'],
'SSA': ['Angola', 'Benin', 'South Africa']})
# what I would like to have without doing it manually
df_indicators['Fragile'] = ['Not Fragile', 'Fragile', 'Fragile']
df_indicators['SSA'] = ['Not SSA', 'SSA', 'Not SSA']
df_indicators
答案 0 :(得分:0)
您可以在系列上应用功能,而不是 isin()
def get_value(x, y, choice):
if x in y:
return choice[0]
else:
return choice[1]
indicators["LDC"] = indicators["Country"].apply(get_value, y=groupings["..."].tolist(), choice= ["Fragile", "Not Fragile"])
我并非100%确定您需要 tolist(),但此代码将为数据框的每一行应用该函数,如果为True则返回选项1,如果为False则返回2。< / p>
我希望它有所帮助,
答案 1 :(得分:-1)
df = indicators.assign(Fragile = np.where(indicators["Country"].
isin(groupings["African Fragile and Conflict Affected Aread (OECD)"]),
'Fragile', 'Not Fragile'))