使用pandas.DataFrame中的复杂条件进行选择

例如,我有简单的DF:

将熊猫作为pd导入
从随机导入randint
df=pd.DataFrame({'A':[randint(1,9)表示xrange(10)中的x],
‘B’:[randint(1,9)*10表示x范围内的x(10)],
'C':[randint(1,9)*100表示x范围内的x(10)])

我是否可以使用熊猫的方法和习惯用法,从“A”中选择“B”对应值大于50的值,以及“C”对应值不等于900的值

当然!设置:

&gt&燃气轮机&燃气轮机;作为pd进口熊猫
&燃气轮机&燃气轮机&燃气轮机;从随机导入randint
&燃气轮机&燃气轮机&燃气轮机;df=pd.DataFrame({'A':[randint(1,9)表示范围(10)中的x],
‘B’:[randint(1,9)*10表示范围(10)内的x],
'C':[randint(1,9)*100表示范围(10)]内的x)
&燃气轮机&燃气轮机&燃气轮机;df
A、B、C
0  9  40  300
1  9  70  700
2  5  70  900
3  8  80  900
4  7  50  200
5  9  30  900
6  2  80  700
7  2  80  400
8  5  80  300
9  7  70  800

我们可以应用列操作并获取布尔系列对象:

&gt&燃气轮机&燃气轮机;df[“B”]>50
0错误
1正确
2正确
3正确
4错误
5错误
6正确
7正确
8正确
9正确
姓名:B
&燃气轮机&燃气轮机&燃气轮机;(df[“B”]>50)和;(df[“C”]==900)
0错误
1错误
2正确
3正确
4错误
5错误
6错误
7错误
8错误
9错误

[更新,切换到新样式.loc]:

然后我们可以用这些索引到对象中。对于读取访问,您可以链接索引:

&gt&燃气轮机&燃气轮机;df[“A”][(df[“B”]>50)&(df[“C”]=900)]
2    5
3    8
名称:A,数据类型:int64

但是,由于视图和副本之间的差异,您可能会遇到麻烦,因为这样做是为了进行写访问。您可以改用.loc

&gt&燃气轮机&燃气轮机;df.loc[(df[“B”]>50)&(df[“C”]==900),“A”]
2    5
3    8
名称:A,数据类型:int64
&燃气轮机&燃气轮机&燃气轮机;df.loc[(df[“B”]>50)和(df[“C”]==900),“A”]值
数组([5,8],dtype=int64)
&燃气轮机&燃气轮机&燃气轮机;df.loc[(df[“B”]>50)&(df[“C”]==900),“A”]*=1000
&燃气轮机&燃气轮机&燃气轮机;df
A、B、C
0     9  40  300
1     9  70  700
2  5000  70  900
3  8000  80  900
4     7  50  200
5     9  30  900
6     2  80  700
7     2  80  400
8     5  80  300
9     7  70  800

请注意,我无意中键入了==900,而不是!=900,或~(df[“C”]==900),但我太懒了,无法修复它。读者练习:^)

发表评论