首页 > 解决方案 > 基于不同行条件的新数据框列

问题描述

我很困。我正在尝试根据某些条件创建一个新列,但条件基于不同的行。

这是我的原始数据的示例:

唯一标识符 第一年 第 2 年
一个 2017
一个 2018
一个 2018
一个 2019
b 2016 年
b 2018
b 2016 年

我希望创建的是一个表,用于标记 year1 和 year2 之间的匹配,但基于 Unique_Identifyer。这就是我的意思:

唯一标识符 第一年 第 2 年 匹配?
一个 2017
一个 2018 是的
一个 2018 是的
一个 2019
b 2016 年 是的
b 2018
b 2016 年 是的

结果本身不需要采用这种格式,因为我的目标实际上是显示每个唯一标识符的匹配年份。

提前致谢

标签: pythonpandasdataframe

解决方案


您可以检查两个列中的共同年份,然后您可以使用np.where.

尝试:

import numpy as np

def check_year(x):
    intersect = np.intersect1d(x['year1'].values, x['year2'].values)
    x['Match'] = np.where((x['year1'].isin(intersect) | x['year2'].isin(intersect)),'Yes','No')
    return x
    
df  = df.groupby('Unique_Identifier').apply(check_year)

输出:

  Unique_Identifier  year1  year2 Match
0                 a   <NA>   2017    No
1                 a   <NA>   2018   Yes
2                 a   2018   <NA>   Yes
3                 a   2019   <NA>    No
4                 b   <NA>   2016   Yes
5                 b   <NA>   2018    No
6                 b   2016   <NA>   Yes

推荐阅读