如何从另一个数据框和pandas

时间:2017-07-26 19:32:50

标签: python pandas

有一个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 

4 个答案:

答案 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 。请不要使用这些答案。它们旨在变得有趣并说明pandaspandas 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>