有一个pandas数据帧:
df = pd.DataFrame({'c1':['a','b','c','d'],'c2':[1,2,3,4]})
c1 c2
0 a 1
1 b 2
2 c 3
3 d 4
大熊猫系列:
list1 = pd.Series(['b','c','e','f'])
Out[6]:
0 a
1 b
2 c
3 e
如何创建包含c1在list1中的行的新数据框。
输出:
c1 c2
0 b 2
1 c 3
答案 0 :(得分:3)
使用query
In [1133]: df.query('c1 in @list1')
Out[1133]:
c1 c2
1 b 2
2 c 3
或者,使用isin
In [1134]: df[df.c1.isin(list1)]
Out[1134]:
c1 c2
1 b 2
2 c 3
答案 1 :(得分:3)
您可以使用df.isin
:
In [582]: df[df.c1.isin(list1)]
Out[582]:
c1 c2
1 b 2
2 c 3
或者,使用df.loc
,如果要修改切片:
In [584]: df.loc[df.c1.isin(list1), :]
Out[584]:
c1 c2
1 b 2
2 c 3
答案 2 :(得分:2)
@ JohnGalt和@ COLDSPEED的答案都更具惯用性>>> df = pd.DataFrame(data={'COLOR_DESC': ['LIGHT_RED', 'DARK_BLUE', 'MEDUIM_GREEN', 'DARK_BLUE']})
>>> df
COLOR_DESC
0 LIGHT_RED
1 DARK_BLUE
2 MEDUIM_GREEN
3 DARK_BLUE
>>> rows = (df['COLOR_DESC'] == 'DARK BLUE')
>>> rows
0 False
1 True
2 False
3 True
Name: COLOR_DESC, dtype: bool
>>> df.loc[rows, 'COLOR_DESC'] = 'BLUE'
>>> df
COLOR_DESC
0 LIGHT_RED
1 BLUE
2 MEDUIM_GREEN
3 BLUE
。请不要使用这些答案。它们旨在变得有趣并说明pandas
和pandas
api的其他部分。
替代1
这是利用numpy
作为numpy.in1d
pd.Series.isin
替代2
使用df[np.in1d(df.c1.values, list1.values)]
c1 c2
1 b 2
2 c 3
逻辑
set
替代3
使用df[df.c1.apply(set) & set(list1)]
c1 c2
1 b 2
2 c 3
pd.Series.str.match
答案 3 :(得分:0)
为了完整
实现这一目标的另一种方式(绝对不是最好的方式):
<li> ... </li>
<li> ... </li>
<li> ... </li>
<li> ... </li>