在转换操作期间比较字符串条件

时间:2019-05-21 03:28:29

标签: python pandas

我的数据框df:

SCHOOL CLASS GRADE
A Spanish nan
A Spanish nan
A Math    4000   
A Math    7830
A Math    3893
B .       nan
B .       nan
B Biology 1929
B Biology 4839
B Biology 8195
C Spanish nan
C English 2003
C English 1000
C Biology 4839
C Biology 8191

如果我这样做:

school_has_only_two_classes = df.groupby('SCHOOL').CLASS
.transform(lambda series: series.nunique()) == 2

我明白了

0      True
1      True
2      True
3      True
4      True
5      True
6      True
7      True
8      True
9      True
10    False
11    False
12    False
13    False
14    False
15    False

如果这样做的话,该转换对于学校C.BUT来说效果很好。

school_has_spanish = df.groupby('SCHOOL').CLASS.transform(lambda series: series.str.contains('^Spanish$',regex=True))

school_has_spanish = df.groupby('SCHOOL').CLASS.transform(lambda series: series=='Spanish')

我得到以下结果,这与我的预期不同:

0      True
1      True
2     False
3     False
4     False
5     False
6     False
7     False
8     False
9     False
10     True
11    False
12    False
13    False
14    False
15    False

转换只是不会将所有True散布到组的其他行。结果是我所期望的:

0      True
1      True
2      True
3      True
4     False
5     False
6     False
7     False
8     False
9     False
10     True
11     True
12     True
13     True
14     True
15     True

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

any检查contains

df.CLASS.str.contains('Spanish').groupby(df.SCHOOL).transform('any')
Out[230]: 
0      True
1      True
2      True
3      True
4      True
5     False
6     False
7     False
8     False
9     False
10     True
11     True
12     True
13     True
14     True
Name: CLASS, dtype: bool