Pandas if语句基于匹配两个不同的列值

时间:2019-11-18 04:53:10

标签: python pandas

我将如何执行此操作:我想添加一个新列,告诉我对于相同的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]
})

3 个答案:

答案 0 :(得分:0)

pandas.DataFrame.groupbytransform一起使用:

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