当然!设定:
>>> import pandas as pd>>> from random import randint>>> df = pd.Dataframe({'A': [randint(1, 9) for x in range(10)], 'B': [randint(1, 9)*10 for x in range(10)], 'C': [randint(1, 9)*100 for x in range(10)]})>>> df A B C0 9 40 3001 9 70 7002 5 70 9003 8 80 9004 7 50 2005 9 30 9006 2 80 7007 2 80 4008 5 80 3009 7 70 800我们可以应用列操作并获取布尔系列对象:
>>> df["B"] > 500 False1 True2 True3 True4 False5 False6 True7 True8 True9 TrueName: B>>> (df["B"] > 50) & (df["C"] == 900)0 False1 False2 True3 True4 False5 False6 False7 False8 False9 False
[更新,切换到新样式.loc]:
然后,我们可以使用它们来索引对象。对于读取访问,可以链接索引:
>>> df["A"][(df["B"] > 50) & (df["C"] == 900)]2 53 8Name: A, dtype: int64
但是由于视图和执行写操作的副本之间的差异,您可能会遇到麻烦。您可以.loc改用:
>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"]2 53 8Name: A, dtype: int64>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"].valuesarray([5, 8], dtype=int64)>>> df.loc[(df["B"] > 50) & (df["C"] == 900), "A"] *= 1000>>> df A B C0 9 40 3001 9 70 7002 5000 70 9003 8000 80 9004 7 50 2005 9 30 9006 2 80 7007 2 80 4008 5 80 3009 7 70 800
请注意,我不小心输入了== 900not != 900和或~(df[“C”] == 900),但我懒得修复它。为读者练习。:^)



