Pandas isin()输出到字符串和通用代码优化

时间:2018-02-17 16:28:58

标签: python pandas dataframe group-concat isinstance

我刚刚开始使用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

enter image description here

2 个答案:

答案 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'))