我有一个问题,如何在给定的数据帧变量中创建一个大于特定值的值列表。
a. b. c.
1. 100 57 23
2. 99 56 23
3. 100 56 22
4. 101 57 23
...
300. 99 50 23
301. 99 51 29
302. 101 57 22
创建所有值的列表,其中> 100。
由于所有值都是布尔值,因此我可以建立索引,但不能建立列表:
Greater_100 = df['a']>100
如何将其转换为列表?
答案 0 :(得分:1)
df = pd.DataFrame(np.random.randint(0, 200, (10, 3)), columns=list('abc'))
list_a_more_than_hundred = df[df.a>100]
答案 1 :(得分:0)
仅df[df['a'] > 100].loc[:, 'a']
或df[df['a'] > 100].loc[:, 'a'].tolist()
就足够了。
从a
列中选择行,其中值> 100。
>>> df[df['a'] > 100].loc[:, 'a']
4 101
302 101
Name: a, dtype: int64
>>>
>>> type(df[df['a'] > 100].loc[:, 'a'])
<class 'pandas.core.series.Series'>
将上述系列转换为列表。
>>> l = df[df['a'] > 100].loc[:, 'a'].tolist()
>>> l
[101, 101]
>>>
>>> type(l)
<class 'list'>
>>>
让我们更详细地看一下上面的代码。
>>> import numpy as np
>>> import pandas as pd
>>>
>>> arr = [[100, 57, 23], [99, 56, 23],
... [100, 56, 20], [101, 57, 23], [99, 50, 23],
... [99, 51, 29], [101, 57, 22]]
>>>
>>> columns = [ch for ch in 'abc']
>>> indices = [str(n) for n in [1, 2, 3, 4, 300, 301, 302]]
>>>
>>> df = pd.DataFrame(arr, index=indices, columns=columns)
>>> df
a b c
1 100 57 23
2 99 56 23
3 100 56 20
4 101 57 23
300 99 50 23
301 99 51 29
302 101 57 22
>>>
>>> df['a'] > 100
1 False
2 False
3 False
4 True
300 False
301 False
302 True
Name: a, dtype: bool
>>>
>>> arr2 = df.loc[:,'a']
>>> arr2
1 100
2 99
3 100
4 101
300 99
301 99
302 101
Name: a, dtype: int64
>>>
>>> arr2 = df[df['a'] > 100]
>>> arr2
a b c
4 101 57 23
302 101 57 22
>>>
>>> arr3 = df[df['a'] > 100].loc[:, 'a']
>>> arr3
4 101
302 101
Name: a, dtype: int64
>>>
>>> l = arr3.tolist()
>>> l
[101, 101]
>>>
答案 2 :(得分:0)
要为数据框过滤a > 100
所在的行,可以使用pd.DataFrame.query
:
res_df = df.query('a > 100')
这在多种情况下也适用:
res_df = df.query('a > 100 & b < 57')
如果您希望从这些行中提取值列表,则可以使用use NumPy,例如
res_lst = df.query('a > 100 & b < 57').values.ravel().tolist()