我有一个如下所示的熊猫数据框
年 | ID | 价值 |
---|---|---|
2016年 | 1 | 100 |
2017年 | 1 | 102 |
2017年 | 1 | 105 |
2018年 | 1 | 98 |
2016年 | 2 | 121 |
2016年 | 2 | 101 |
2016年 | 2 | 133 |
2018年 | 3 | 102 |
我想检查该 ID 是否仅存在于 2018 年。我想要的输出如下:
年 | ID | 价值 | ID_only_in_2018 |
---|---|---|---|
2016年 | 1 | 100 | 0 |
2017年 | 1 | 102 | 0 |
2017年 | 1 | 105 | 0 |
2018年 | 1 | 98 | 0 |
2016年 | 2 | 121 | 0 |
2016年 | 2 | 101 | 0 |
2016年 | 2 | 133 | 0 |
2018年 | 3 | 102 | 1 |
请问,我怎样才能在python中实现这一点?
比较 Year for 2018
,然后测试所有值是否仅为2018
:
mask = df['Year'].eq(2018).groupby(df['ID']).transform('all')
另一个想法是测试是否 Year 不是2018
,过滤ID
不匹配的至少一个非2018
行和最后一个反转掩码,~
用于仅获取2018
组:
mask = ~df['ID'].isin(df.loc[df['Year'].ne(2018), 'ID'])
最后将掩码转换为整数:
df['ID_only_in_2018'] = mask.astype(int)
或者:
df['ID_only_in_2018'] = np.where(mask, 1, 0)
或者:
df['ID_only_in_2018'] = mask.view('i1')
print (df)
Year ID Value ID_only_in_2018
0 2016 1 100 0
1 2017 1 102 0
2 2017 1 105 0
3 2018 1 98 0
4 2016 2 121 0
5 2016 2 101 0
6 2016 2 133 0
7 2018 3 102 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句