我有一个pandas数据框,想要选择某些列具有某些特定值的行。例如,对于一列,我尝试过这样:
df = pd.DataFrame({
'subA': [54,98,70,91,38],
'subB': [25,26,30,93,30],
'subC': [43,89,56,50,48]})
a = df[df['subA'] == 70]
print(a)
输出如下:
subA subB subC
2 70 30 56
这是预料之中的,完全可以理解。现在,我想选择前两列具有特定值的行。例如,我将代码更改如下:
df = pd.DataFrame({
'subA': [54,98,70,91,38],
'subB': [25,26,30,93,30],
'subC': [43,89,56,50,48]})
my_sub = ['subA', 'subB']
my_marks = [54, 25]
a = df[df[my_sub] == my_marks]
print(a)
我原本希望看到这样的结果:
subA subB subC
1 54 25 43
但是相反,输出充满了NaN值,这对我来说并不明确:
subA subB subC
0 54.0 25.0 NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 NaN NaN NaN
我在这里缺少想要的输出吗?我也尝试过.loc和iloc,但是没有帮助。
答案 0 :(得分:6)
您可以使用all
使布尔索引成为可能
df[(df[my_sub] == my_marks).all(axis=1)]
subA subB subC
0 54 25 43
或者使用@anev说的eq
和all
df[df[my_sub].eq(my_marks).all(axis=1)]
subA subB subC
0 54 25 43
答案 1 :(得分:3)
尝试:
df.loc[df.filter(my_sub).isin(my_marks).all(1)]
第一步是仅选择感兴趣的列,使用isin
函数获取布尔值。 all
函数仅获取完全为True的行,然后您可以为原始数据帧建立索引以获取结果
subA subB subC
0 54 25 43