我有一个数据集,其中包括一个关于教育水平和年薪的列(出于某种原因,表示为>50k、>=50k、<50k等(。我需要弄清楚有多少受过高等教育的人,也就是学士、硕士和博士,收入超过5万。这意味着我需要选择教育栏中有博士、学士或硕士的行,而工资栏的第一个字符是">"。正确的语法是什么?如果需要,将提供更多信息。请帮忙。
要只选择受过高等教育的人,可以使用isin
通过学历列表。对于年薪,如果你只针对>
(例如str.startswith
('>')
(进行测试,你最终可能会包括Year_Salary
也是equal
到50k的行。
import pandas as pd
import numpy as np
#setup
np.random.seed(42)
d = {
'Year_Salary': np.random.choice(['>50k','>=50k','<50k'], size=(50,)),
'Education': np.random.choice(['doctorate','bachelors','masters','undergraduate'], size=(50,))
}
df = pd.DataFrame(d)
#code
filtered_df = df[df['Education'].isin(['doctorate','bachelors','masters'])
& df['Year_Salary'].str.startswith('>')]
print(filtered_df)
print(filtered_df.shape[0]) # 20 (number of matches)
filtered_df的输出
Year_Salary Education
1 >50k doctorate
4 >50k bachelors
7 >=50k masters
14 >=50k masters
...
要只获取Year_Salary
大于50k的行,可以将str.match
与正则表达式^>d+
一起使用,后者是一个以文字>
开头,后跟一个或多个数字的字符串。
df[df['Education'].isin(['doctorate','bachelors','masters']) & (df['Year_Salary'].str.match(r'^>d+'))]
您可以使用以下语句根据条件过滤数据帧:
newdf = df[(df.val > 0.5) & (df.val2 == 1)]
或
您可以遍历行并更新列。参考以下代码:
for index, row in df.iterrows():
....