gpt4 book ai didi

python - Pandas 使用 Series 过滤 DataFrame

转载 作者:行者123 更新时间:2023-12-01 06:56:48 27 4
gpt4 key购买 nike

我有一个包含以下内容的 pandas 系列。

$ import pandas as pd
$ filter = pd.Series(
data = [True, False, True, True],
index = ['A', 'B', 'C', 'D']
)
$ filter.index.name = 'my_id'

$ print(filter)

my_id
A True
B False
C True
D True
dtype: bool

和像这样的 DataFrame。

$ df = pd.DataFrame({
'A': [1, 2, 9, 4],
'B': [9, 6, 7, 8],
'C': [10, 91, 32, 13],
'D': [43, 12, 7, 9],
'E': [65, 12, 3, 8]
})

$ print(df)

A B C D E
0 1 9 10 43 65
1 2 6 91 12 12
2 9 7 32 7 3
3 4 8 13 9 8

filterA , B , C ,和D作为其指数。 dfA , B , C , D ,和E正如它的列名称。

Truefilter表示df中对应的列将被保留。 Falsefilter表示df中对应的列将被删除。专栏Edf应删除,因为 filter不包含E .

如何生成另一个带有列 B 的 DataFrame ,和E使用 filter 删除?

我的意思是我想使用 filter 创建以下 DataFrame和df .

   A   C   D
0 1 10 43
1 2 91 12
2 9 32 7
3 4 13 9

df.loc[:, filter]生成以下错误。

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/username/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py", line 1494, in __getitem__
return self._getitem_tuple(key)
File "/Users/username/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py", line 888, in _getitem_tuple
retval = getattr(retval, self.name)._getitem_axis(key, axis=i)
File "/Users/username/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py", line 1869, in _getitem_axis
return self._getbool_axis(key, axis=axis)
File "/Users/username/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py", line 1515, in _getbool_axis
key = check_bool_indexer(labels, key)
File "/Users/username/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py", line 2486, in check_bool_indexer
raise IndexingError('Unalignable boolean Series provided as '
pandas.core.indexing.IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

df.loc[:, filter]如果 df 则有效不包含列 E

我在案例中遇到的 DataFrame ( len(df.columns) ) 的实际长度包含大约 2000 列。该系列( len(filter) )的长度约为 1999 年。这使我很难确定 df 中包含哪些元素。但不在 filter 中.

最佳答案

这应该可以满足您的需求:

df.loc[:, filter[filter].index]

说明:您在 filter 中选择包含 True 的行,并使用其 index 标签从 df< 中选取列.

您不能直接在 filter 中使用 bool 值,因为它包含的值少于 df 中的列。

关于python - Pandas 使用 Series 过滤 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58779015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com