有没有办法为B
大于零的索引One
提取C
的所有值?所以我想提取值-0.22
和-1.21
。
import numpy as np
import pandas as pd
arrays =[np.array(['One','One','One','Two','Two','Two']),np.array(['A','B','C','A','B','C'])]
df = pd.DataFrame(np.random.randn(6,5),index=arrays)
df
0 1 2 3 4
One A -0.908680 0.031505 -0.087090 -0.039527 0.221196
B 1.010757 1.272553 -0.220535 -1.216996 -0.122108
C -0.781714 -1.830215 0.584311 0.010987 -0.050355
Two A -0.331269 0.410596 0.569802 1.455710 0.377796
B 0.079330 -2.538031 -1.665904 0.477257 0.500805
C -0.388749 2.188289 -1.465292 0.594870 -0.031983
答案 0 :(得分:2)
您可以创建mask
,然后mask
使用loc
:
import numpy as np
import pandas as pd
np.random.seed(1)
arrays = [np.array(['One','One','One','Two','Two','Two']),
np.array(['A','B','C','A','B','C'])]
df = pd.DataFrame(np.random.randn(6,5),index=arrays)
print (df)
0 1 2 3 4
One A 1.624345 -0.611756 -0.528172 -1.072969 0.865408
B -2.301539 1.744812 -0.761207 0.319039 -0.249370
C 1.462108 -2.060141 -0.322417 -0.384054 1.133769
Two A -1.099891 -0.172428 -0.877858 0.042214 0.582815
B -1.100619 1.144724 0.901591 0.502494 0.900856
C -0.683728 -0.122890 -0.935769 -0.267888 0.530355
idx = pd.IndexSlice
mask = (df.loc[idx['One', 'C'],:]) > 0
print (mask)
0 True
1 False
2 False
3 False
4 True
Name: (One, C), dtype: bool
print (df.loc[idx['One', 'B'], mask])
0 -2.301539
4 -0.249370
Name: (One, B), dtype: float64