从Pandas DataFrame中提取子集索引

5

我有一个包含列 [A, B, C, D, E, F, G, H] 的 DataFrame。

使用列 [D, G, H] 创建了一个索引:

>>> print(dgh_columns)
Index(['D', 'G', 'H'], dtype='object')

如何检索原始 DataFrame,不包括D、G、H

是否存在索引子集操作?

理想情况下,应该是:

df[df.index - dgh_columns]

但是这似乎不起作用。
2个回答

5

我认为您可以使用Index.difference

df[df.columns.difference(dgh_columns)]

示例:

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[7,8,9],
                   'F':[1,3,5],
                   'G':[5,3,6],
                   'H':[7,4,3]})

print (df)
   A  B  C  D  E  F  G  H
0  1  4  7  1  7  1  5  7
1  2  5  8  3  8  3  3  4
2  3  6  9  5  9  5  6  3

dgh_columns = pd.Index(['D', 'G', 'H'])
print (df[df.columns.difference(dgh_columns)])
   A  B  C  E  F
0  1  4  7  7  1
1  2  5  8  8  3
2  3  6  9  9  5

Numpy解决方案,使用numpy.setxor1dnumpy.setdiff1d

dgh_columns = pd.Index(['D', 'G', 'H'])
print (df[np.setxor1d(df.columns, dgh_columns)])
   A  B  C  E  F
0  1  4  7  7  1
1  2  5  8  8  3
2  3  6  9  9  5

dgh_columns = pd.Index(['D', 'G', 'H'])
print (df[np.setdiff1d(df.columns, dgh_columns)])
   A  B  C  E  F
0  1  4  7  7  1
1  2  5  8  8  3
2  3  6  9  9  5

嗯,有道理,但我收到了“IndexError:索引超出范围”的错误。 - Jivan
请检查我的样例,我觉得之前打错了。 - jezrael
好的,那是因为我在初始化“dgh_columns”之后进行了列插入/删除。 - Jivan
无论如何,我会接受你的答案,因为它肯定是“正确的”答案 :) 我只需要弄清楚我的代码细节。 - Jivan
谢谢,很高兴能帮助你。 - jezrael

2

使用drop

df.drop(list('DGH'), axis=1)

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[7,8,9],
                   'F':[1,3,5],
                   'G':[5,3,6],
                   'H':[7,4,3]})

df.drop(list('DGH'), 1)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接