从值大于特定值的数据框中创建列表

时间:2018-07-27 00:53:26

标签: python list dataframe indexing

我有一个问题,如何在给定的数据帧变量中创建一个大于特定值的值列表。

       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

如何将其转换为列表?

3 个答案:

答案 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()