如果> 1为其他列

时间:2016-01-13 18:51:53

标签: python python-3.x pandas

给出以下数据框:

import pandas as pd
df = pd.DataFrame(
        {'A':['A','A','B','B','C','C'],
         'B':['Y','Y','N','N','Y','N'],
        })
df

    A   B
0   A   Y
1   A   Y
2   B   N
3   B   N
4   C   Y
5   C   N

我需要一行代码: 1.确定B列中每个A类别的唯一值是否超过1个(即类别" C" A列中B列有2个唯一值,而类别" A"并且" B"在A列中每个只有1个唯一值。 2.将B列中的值更改为" Y" 仅当每个类别有超过1个唯一值时(即B列应该具有" Y"对于两个类别" C"在A列中;

这是预期的结果:

    A   B

0   A   Y
1   A   Y
2   B   N
3   B   N
4   C   Y
5   C   Y

提前致谢!

2 个答案:

答案 0 :(得分:2)

你可以:

df['B'] = df.groupby('A')['B'].transform(lambda x: 'Y' if x.nunique() > 1 else x)

得到:

   A  B
0  A  Y
1  A  Y
2  B  N
3  B  N
4  C  Y
5  C  Y

答案 1 :(得分:1)

这应该有效:

File "/Users/kamal/.pyenv/versions/3.4.0/lib/python3.4/contextlib.py", line 78, in __exit__
    raise RuntimeError("generator didn't stop")
RuntimeError: generator didn't stop