如何使用panda来计算其中两列必须从每列的指定字符串集中有一个特定字符串的行



我有一个数据集,其中包括一个关于教育水平和年薪的列(出于某种原因,表示为>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():
....

相关内容

最新更新