Python Pandas根据标头值匹配Vlookup列

jea*_*elj 8 python lookup match pandas

我有以下数据帧df:

Customer_ID | 2015 | 2016 |2017 | Year_joined_mailing
ABC            5      6     10     2015
BCD            6      7     3      2016        
DEF            10     4     5      2017
GHI            8      7     10     2016
Run Code Online (Sandbox Code Playgroud)

我想在他们加入邮件列表的那一年查找客户的价值并将其保存在新列中.

输出将是:

Customer_ID | 2015 | 2016 |2017 | Year_joined_mailing | Purchases_1st_year
ABC            5      6     10     2015                       5
BCD            6      7     3      2016                       7       
DEF            10     4     5      2017                       5
GHI            8      9     10     2016                       9
Run Code Online (Sandbox Code Playgroud)

我在python中找到了一些匹配vlookup的解决方案,但没有一个会使用其他列的头文件.

piR*_*red 12

使用 请记住,我假设是索引. pd.DataFrame.lookup
Customer_ID

df.lookup(df.index, df.Year_joined_mailing)

array([5, 7, 5, 7])
Run Code Online (Sandbox Code Playgroud)
df.assign(
    Purchases_1st_year=df.lookup(df.index, df.Year_joined_mailing)
)

             2015  2016  2017  Year_joined_mailing  Purchases_1st_year
Customer_ID                                                           
ABC             5     6    10                 2015                   5
BCD             6     7     3                 2016                   7
DEF            10     4     5                 2017                   5
GHI             8     7    10                 2016                   7
Run Code Online (Sandbox Code Playgroud)

但是,您必须小心比较列名称中的可能字符串和第一年列中的整数...

确保类型比较的核选项得到尊重.

df.assign(
    Purchases_1st_year=df.rename(columns=str).lookup(
        df.index, df.Year_joined_mailing.astype(str)
    )
)

             2015  2016  2017  Year_joined_mailing  Purchases_1st_year
Customer_ID                                                           
ABC             5     6    10                 2015                   5
BCD             6     7     3                 2016                   7
DEF            10     4     5                 2017                   5
GHI             8     7    10                 2016                   7
Run Code Online (Sandbox Code Playgroud)