Jon*_*tel 1 python dataframe pandas
我正在尝试为上述问题找到一个非常好的、全面的答案。
让我们采用以下数据框:
df = pd.DataFrame(np.random.randn(4,4), columns=['A', 'B', 'C', 'D'])
df['Category'] = pd.Series(['Cat1', 'Cat2', 'Cat1', 'Cat2'])
df:
A B C D Category
0 0.057456 0.462712 -1.245539 0.095947 Cat1
1 0.741688 0.353600 1.130754 -1.692440 Cat2
2 0.638623 -0.109566 0.118509 -0.692661 Cat1
3 -0.905806 0.284818 -0.094696 -1.325617 Cat2
Run Code Online (Sandbox Code Playgroud)
df.A我了解使用或df['A']选择列的基本命名法A,以及df[['A', 'B']]选择列A和B。
如果我想传递布尔条件,我可以执行诸如df[df.A > 0]返回df.A大于 0 的行之类的操作。并且我可以包含多个条件,例如df[(df.A > 0) & (df.Category == 'Cat1')]包含多个条件。
但我没有看到的一件事是,我如何选择具有上面使用的相同两个布尔条件的数据帧列的子集。
我尝试过的两种方法都没有成功:
df['B'].where(df.A > 0)
Run Code Online (Sandbox Code Playgroud)
这将返回索引中的所有行,而我只希望返回True符合所述条件的行。
我也尝试过使用query但没有成功,因为它不能在系列上使用。
所以df['A'].query(some condition)返回错误信息。
理想情况下,我正在寻找的解决方案具有以下条件:
df['A']和df['B']。True仅返回符合条件的行,而不是所有行。谢谢。
我想你正在寻找.loc
df.loc[df.A>0,'B']
0 0.462712
1 0.353600
2 -0.109566
Name: B, dtype: float64
df.loc[(df.A>0)&(df.B<0),['B','C']]
B C
2 -0.109566 0.118509
Run Code Online (Sandbox Code Playgroud)