我将如何执行此操作:我想添加一个新列,告诉我对于相同的ID,他们是否同时具有“蓝色”和“绿色”。
df = pd.DataFrame({
'id' : ['a1', 'a1', 'b1', 'b1', 'c1'],
'value' : ['blue', 'green', 'green', 'blue', 'blue']
})
所以它应该是这样的:
df = pd.DataFrame({
'id' : ['a1', 'a1', 'b1', 'b1', 'c1'],
'value' : ['blue', 'green', 'green', 'blue', 'blue']
'both' : [True, True, True, True, False]
})
答案 0 :(得分:0)
将pandas.DataFrame.groupby
与transform
一起使用:
df['both'] = df.groupby('id')['value'].transform(lambda x: set(x).issuperset({'blue', 'green'}))
print(df)
输出:
id value both
0 a1 blue True
1 a1 green True
2 b1 green True
3 b1 blue True
4 c1 blue False
答案 1 :(得分:0)
尝试使用groupby
:
df['both'] = df.groupby('id')['value'].transform('unique').apply(lambda x: pd.Series(df['value'].unique()).isin(x))[1]
print(df)
输出:
id value both
0 a1 blue True
1 a1 green True
2 b1 green True
3 b1 blue True
4 c1 blue False
答案 2 :(得分:0)
您还可以使用此:
df.merge(df.groupby('id')['value'].unique().apply(lambda x: ('blue' in x) and ('green' in x)).reset_index().rename(columns={'value': 'both'}), on='id', how='left')
,输出将是:
id value both
0 a1 blue True
1 a1 green True
2 b1 green True
3 b1 blue True
4 c1 blue False