python - pandas 选择数据框中有条件的特定列与另一个条件导致串联

标签 python pandas

我想使用 loc 按名称选择特定列,因为我想用另一个条件来执行此操作。 我尝试使用

来实现此目的时出现奇怪的行为
df.loc[,conditionOne | conditionTwo]

其中一个条件是列名是否在特定的名称列表中,第二个条件是另一个条件(这里是列的中位数):

df = pd.DataFrame({'A' : [0,0,0,0], 'B' : [1,2,3, 5],  'C' : [10,20,30, 50]})
df.columns.values
keepColumnsNames = ['A', 'c']
condtionOne = df.mean()>2
print(condtionOne)
"#A    False"
"#B     True"
"#C     True"
"#dtype: bool" 
condtionTwo=pd.DataFrame(df.columns.values).iloc[:,0].isin(keepColumnsNames)
print(condtionTwo)
"#A    False"
"#B     True"
"#C     True"

现在,当我想在两个条件之间执行或运算符时,我会得到下一个奇怪的行为:

print(condtionOne | condtionTwo )
"#0    False"
"#1    False"
"#2    False"
"#A    False"
"#B     True"
"#C     True"
"#dtype: bool"

虽然我希望得到

"#False"
"#True"
"#True"

最佳答案

您需要在两个掩码中使用相同的索引:

condtionTwo=pd.DataFrame(df.columns.values,index=df.columns).iloc[:,0].isin(keepColumnsNames)
print(condtionTwo)
A     True
B    False
C    False
Name: 0, dtype: bool

或者更好,感谢@Julien Marrec 的评论是创建没有索引的数组:

condtionTwo = df.columns.isin(keepColumnsNames) 
print(condtionTwo)
[ True False False]

print(condtionOne | condtionTwo)
A    True
B    True
C    True
dtype: bool

一起:

df1 = df.loc[:, condtionOne | condtionTwo]
print (df1)
   A  B   C
0  0  1  10
1  0  2  20
2  0  3  30
3  0  5  50

与以下内容相同:

df1 = df.loc[:, (df.mean() > 2) | (df.columns.isin(keepColumnsNames))]
print (df1)
   A  B   C
0  0  1  10
1  0  2  20
2  0  3  30
3  0  5  50

关于python - pandas 选择数据框中有条件的特定列与另一个条件导致串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497809/

相关文章:

c++ - 使用SWIG将自定义C++异常动态地重新抛出为Python异常

python - 将 Numpy 数组索引存储在变量中

Python:计算两列内值的组合并找到每个组合的最大频率

python - 如何使用 numpy 将 nan 添加到数组的末尾

python - 如果特定列不唯一,则拒绝 POST 请求

python - 如何在循环中将字符串相互添加?

python - 使用Python找出2个数字的lcm

python - 如何用 Pandas 计算波动性?

Python根据不同的行创建新的数据框列

python - 使用 Python 和 SQL Server 的 ETL 过程需要很长时间才能加载