我目前正在尝试创建一个新列,然后过滤:
df['filterSalaryLoc'] = df[True if df['distance'] <= 25 & df['compensation_right'] else False]
这就是DF的样子:
distance compensation_right
1 20.299433 True
2 1014.258732 True
3 1027.524228 True
4 5556.81612 True
5 926.003129 True
6 19.832819 True
7 1.489066 True
8 434.355273 True
9 23.647016 True
如果列条目为false,则将其提取出来。但是它不起作用并在此处创建错误:df['filterSalaryLoc'] = df[True if df['distance'] <= 25 & df['compensation_right'] else False]
。任何人都知道出了什么问题?
答案 0 :(得分:2)
我想也许你可以这样做:
In [10]: df['filterSalaryLoc'] = (df['distance']<=25) & (df['compensation_right'])
In [11]: df
Out[11]:
distance compensation_right filterSalaryLoc
0 20.299433 True True
1 1014.258732 True False
2 1027.524228 True False
3 5556.816120 True False
4 926.003129 True False
5 19.832819 True True
6 1.489066 True True
7 434.355273 True False
8 23.647016 True True
括号在右侧是必要的,因为没有它们df['distance']<=25 & df['compensation_right']
被解析为
In [18]: df['distance']<=(25 & df['compensation_right'])
Out[18]:
0 False
1 False
2 False
3 False
4 False
5 False
6 False
7 False
8 False
dtype: bool
(注意这都是假的。)
答案 1 :(得分:0)
你可以试试这个:
使用df[(df.distance <= 25) & (df.compensation_right)]
查找您的情况属实(您不需要[True if ... else False]
)。然后取出那些行(.index
)并在这些索引处创建一个新列,在其他地方创建NaN
。
In [7]: df.loc[df[(df.distance <= 25) & (df.compensation_right)].index, 'filterSalaryLoc'] = True
In [8]: df
Out[8]:
distance compensation_right filterSalaryLoc
1 20.299433 True True
2 1014.258732 True NaN
3 1027.524228 True NaN
4 5556.816120 True NaN
5 926.003129 True NaN
6 19.832819 True True
7 1.489066 True True
8 434.355273 True NaN
9 23.647016 True True
[9 rows x 3 columns]
使用False填充NaN
:
In [9]: df.filterSalaryLoc.fillna(False, inplace=True)
In [10]: df
Out[10]:
distance compensation_right filterSalaryLoc
1 20.299433 True True
2 1014.258732 True False
3 1027.524228 True False
4 5556.816120 True False
5 926.003129 True False
6 19.832819 True True
7 1.489066 True True
8 434.355273 True False
9 23.647016 True True
[9 rows x 3 columns]
如果您安装了pandas 0.13
或更高版本,则第一行可以替换为:
In [13]: df.loc[df.query('distance <= 25 and compensation_right').index, 'filterSalaryLoc'] = True