如何在Pandas的某些值中获取行的哪些列?

时间:2017-03-07 22:28:21

标签: pandas

我知道这必须在以太那里,但我找不到它。我精通R,试图找出Pandas,这让我想把这台PC扔出窗外。这是一个漫长的一天。

我希望能够根据某行的列中的值提取数据框的列名:

foo = pd.DataFrame(
[[-1,-5,3,0,-5,8,1,2]],
columns = ('a','b','c','d','e','f','g','h')
)

foo
Out[25]: 
   a  b  c  d  e  f  g  h
0 -1 -5  3  0 -5  8  1  2

我想得到一个矢量,我可以通过以下方式对其他数据帧进行子集化:

foo >= 0

给了我另一个数据帧,我不能用它来对一个向量进行子集化(系列?无论你把它们称为什么?)

我想做这样的事情:

otherDF[ foo >= 0 ]

思想???

2 个答案:

答案 0 :(得分:1)

IIUC你在列掩码之后:

In [25]:
foo[foo >= 0].dropna(axis=1).columns

Out[25]:
Index(['c', 'd', 'f', 'g', 'h'], dtype='object')

如果您使用条件来掩盖df:

In [26]:
foo[foo >= 0]

Out[26]:
    a   b  c  d   e  f  g  h
0 NaN NaN  3  0 NaN  8  1  2

如果我们然后删除带有NaN的列,则只留下感兴趣的列:

In [27]:
foo[foo >= 0].dropna(axis=1)

Out[27]:
   c  d  f  g  h
0  3  0  8  1  2

然后,您可以使用.columns属性

获取列

答案 1 :(得分:1)

您只需要使用loc(例如df.loc [:,columns])

import pandas as pd
import numpy as np

cols = ('a','b','c','d','e','f','g','h')
foo = pd.DataFrame(
[[-1,-5,3,0,-5,8,1,2]],
columns = cols)

bar = pd.DataFrame(np.random.randint(0, 10, (3, len(cols))), columns=cols)

print foo

   a  b  c  d  e  f  g  h
0 -1 -5  3  0 -5  8  1  2

print bar

   a  b  c  d  e  f  g  h
0  7  9  2  9  5  3  2  9
1  5  7  4  1  5  1  4  0
2  4  9  1  3  3  7  0  2


columns_boolean = foo.iloc[0] >= 0
columns_to_keep = foo.columns[columns_boolean]

print bar.loc[:, columns_to_keep] 


   c  d  f  g  h
0  2  9  3  2  9
1  4  1  1  4  0
2  1  3  7  0  2

或者,如果您的其他数据框没有相同的列名但具有相同的列数,您仍然可以使用" loc"但只需传入要保留的列的布尔数组:

bar.loc[:, columns_boolean.values]



  c  d  f  g  h
0  7  2  6  3  9
1  4  3  8  0  3
2  5  7  1  3  0