我知道这必须在以太那里,但我找不到它。我精通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 ]
思想???
答案 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