创建新数据帧时收到“布尔系列键将重新索引以匹配数据帧索引”警告

Twe*_*eep 3 python dataframe pandas boolean-indexing

使用以下代码创建新数据框是否有任何潜在的缺点,其中我指定了我希望在新数据框中看到的原始数据框中的非常具体的信息。

df_workloc = (df[df['WorkLoc'] == 'Home'][df['CareerSat'] == 'Very satisfied'][df['CurrencySymbol'] == 'USD'][df['CompTotal'] >= 50000])

我使用了 2019 年 Stack Overflow 调查数据。像这样:

WorkLoc指定受访者的工作地点。

CareerSat详细说明了受访者的职业满意度。

货币符号指定受访者收到付款的货币。

CompTotal指定受访者的总薪酬是多少。

如果有人有一种更干净、更有效的方法来实现具有精致/特定信息的数据框架,我很乐意看到它。我想做的一件事是在同一行中指定补偿总计CompTotal >= 50000 且 <=75000。但是,当我尝试包含第二个布尔值时出现错误。

提前致谢。

jez*_*ael 5

我认为您需要使用 & 进行按位AND和过滤的链条件boolean indexing,也用于最后一个条件的使用Series.between

m1 = df['WorkLoc'] == 'Home'
m2 = df['CareerSat'] == 'Very satisfied'
m3 = df['CurrencySymbol'] == 'USD'
m4 = df['CompTotal'].between(50000, 75000)
df_workloc = df[m1 & m2 & m3 & m4]
Run Code Online (Sandbox Code Playgroud)

或者对于单行解决方案:

df_workloc = df[(df['WorkLoc'] == 'Home') &
                (df['CareerSat'] == 'Very satisfied') &
                (df['CurrencySymbol'] == 'USD') &
                 df['CompTotal'].between(50000, 75000)]
Run Code Online (Sandbox Code Playgroud)