我有两个文件。一个包含元数据/标签,另一个包含具有与元数据文件对应的标签的实际计数数据。 我浏览了元数据文件并使用Pandas切出了我想要的标签并将其导出到列表中。
如何获取标签列表并使用它来按列标签切片Pandas DataFrame?
我已经使用行标签做了类似的事情,但那是使用Pandas .isin()函数,它不能在列上使用。
编辑: 当我根据列表中是否找到行的名称切出行时,我使用类似于此的单行
row_list = ['row_name1', 'row_name2', row_name3']
sliced_rows = df[df['row_names'].isin(row_list)]
df =
row_names 1 2 3 4
row_name1 0 2 0 6
row_name5 0 0 1 0
row_name2 0 0 0 0
row_name17 0 5 6 5
所以在这里我得到row_names1
& rownames_2
我尝试做同样的事情,但是当row_names标记列而不是名称时。
所以矩阵看起来像这样。
label column_name1 column_name2 column_name3 column_name4
1 0 2 0 6
2 0 0 1 0
3 0 0 0 0
4 0 5 6 5`
我根据列的名称是否在整个数据框的列表中按列进行选择。
答案 0 :(得分:1)
实际上您可以使用isin
:
In [34]:
df = pd.DataFrame(np.random.randn(5, 4), columns=list('ABCD'))
df
Out[34]:
A B C D
0 0.540783 0.206722 0.627336 0.865066
1 0.204596 1.317936 0.624362 -0.573012
2 0.124457 1.052614 -0.152633 -0.021625
3 0.415278 1.469842 0.581196 0.143085
4 0.043743 -1.191018 -0.202574 0.479122
In [37]:
col_list=['A','D']
df[df.columns[df.columns.isin(col_list)]]
Out[37]:
A D
0 0.540783 0.865066
1 0.204596 -0.573012
2 0.124457 -0.021625
3 0.415278 0.143085
4 0.043743 0.479122
所以你可以做的就是调用isin
并传递你的列表,这将产生一个布尔系列:
In [38]:
df.columns.isin(col_list)
Out[38]:
array([ True, False, False, True], dtype=bool)
然后使用布尔掩码来掩盖列:
In [39]:
df.columns[df.columns.isin(col_list)]
Out[39]:
Index(['A', 'D'], dtype='object')
现在,您可以使用一系列列来使用
对df进行子集化